[PERL] SDL - geluid ontbreekt?

Pagina: 1
Acties:

  • maleadt
  • Registratie: Januari 2006
  • Laatst online: 30-11 18:38
Hey mede-tweaker! :+

Ik ben juist begonnen met het ontwikkelen van een perl mediaplayer. Dit is onderdeel van een toekomstig projectje, waar ik een low-end pc tot jukebox omtover. Ik zou dit graag volledig in perl doen, besturen van een mediaspeler zoals vb Winamp is IMHO nogal moeizaam, én het is natuurlijk leerzamer als ik het zelf doe :)

Anyway, bij het ontwikkelen van het mediaplayer-gedeelte bots ik al op problemen. Ik zocht naar een goede en flexibele audio-library, en heb daarbij voor SDL gekozen (die in perl uitvoering bestaat). Ik doe alles volgens documentatie: mixer-object met kanalen maken, muziek laden, volume instellen en afspelen maar. Alleen in theorie helaas, want er komt niks door mn boxen... Hier het relevante stukje code:

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
print "* Intializing SDL...\n";
die "Could not initialize SDL: ", SDL::GetError()
    if ( 0 > SDL::Init(SDL_INIT_AUDIO()));
    
print "\t- Using audio driver: ", SDL::AudioDriverName(), "\n";
print "\t- SDL Audio status: ", SDL_Status(), ".\n";

print "* Creating mixer.\n";
my $mixer = SDL::Mixer->new(    # 1 music channel, 8 audio channels
    -frequency => MIX_DEFAULT_FREQUENCY,
    -format    => MIX_DEFAULT_FORMAT,
    -channels  => MIX_DEFAULT_CHANNELS,
    -size      => 4096
)  or die("Couldn't create mixer object.");

print "* Loading music.\n";
my $music  = new SDL::Music('test.mp3') or die("Couldn't create music object.");

print "* Setting volume.\n";
$mixer->music_volume(MIX_MAX_VOLUME) or die("Couldn't set volume.");

print "* Starting playback.\n";
$mixer->play_music( $music, 100 ) or die("Counldn't play music.");
my $done = 0;
while (! $done)
{
    print "\t- SDL Audio status: ", SDL_Status(), ".\n";
    sleep(2);
}

sub SDL_Status
{
    my $status = SDL::GetAudioStatus();
    return "playing" if ($status == SDL_AUDIO_PLAYING);
    return "paused" if ($status == SDL_AUDIO_STOPPED);
    return "stopped" if ($status == SDL_AUDIO_PAUSED);
    return "unknown";
}


Dit geeft de gewenste output, maar zonder geluid :(
code:
1
2
3
4
5
6
7
8
* Intializing SDL...
        - Using audio driver: dsound
        - SDL Audio status: paused.
* Creating mixer.
* Loading music.
* Setting volume.
* Starting playback.
        - SDL Audio status: playing.


Enige informatie:
code:
1
2
3
ActivePerl v5.8.8 build 820
SDL_Perl 2.1.3
Windows XP SP2

AFAIK is hierbij geen extra SDL DLL nodig, die zit bij de SDL_Perl uitgave (ik heb het echter geprobeerd, de SDL dll in system32, maakt niks uit)...

Alvast bedankt :)
maleadt

  • maleadt
  • Registratie: Januari 2006
  • Laatst online: 30-11 18:38
Antwoord zelf gevonden: SDL ondersteund geen mp3, mits installatie van Lokisoft's SMPEG libraries (die nu niet terug te vinden zijn)... Jammer maar helaas dus.
Kent iemand alternatieve afspeellibraries voor Perl?

maleadt