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:
Dit geeft de gewenste output, maar zonder geluid
Enige informatie:
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
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