Hi! Ok, now I don't get any error when playing mp3 files from the database, but I don't get any sound either.
I updated Alien::SDL to the latest version, that worked. However, SDL itself didn't pass the tests, it's the channels test that fails. So I installed with force, but no change. Is there anything in particular I could do to provide information about the error that occurs with the cannels test? Any information you need to fix this issue (in case it is one)? Best regards, Alex [snip] Test Summary Report ------------------- t\core.t (Wstat: 0 Tests: 28 Failed: 0) TODO passed: 21-22 t\core_video.t (Wstat: 0 Tests: 110 Failed: 0) TODO passed: 57, 59 t\mixer_channels.t (Wstat: 65280 Tests: 35 Failed: 0) Non-zero exit status: 255 Parse errors: No plan found in TAP output Files=59, Tests=3942, 233 wallclock secs ( 0.94 usr + 0.23 sys = 1.17 CPU) Result: FAIL Failed 1/59 test programs. 0/3942 subtests failed. (C:\strawberry\perl\bin\perl.exe ./Build test exited with 65280) CPAN::Reporter: Test result is 'fail', One or more tests failed. CPAN::Reporter: preparing a CPAN Testers report for SDL-2.536 CPAN::Reporter: this appears to be a duplicate report for the test phase: FAIL SDL-2.536 MSWin32-x64-multi-thread 6.1 Test report will not be sent. FROGGS/SDL-2.536.tar.gz C:\strawberry\perl\bin\perl.exe ./Build test -- NOT OK //hint// to see the cpan-testers results for installing this module, try: reports FROGGS/SDL-2.536.tar.gz Running Build install make test had returned bad status, won't install without force Failed during this command: FROGGS/SDL-2.536.tar.gz : make_test NO [/snip] -----Ursprüngliche Nachricht----- Von: Tobias Leich [mailto:em...@froggs.de] Gesendet: Sonntag, 22. April 2012 19:31 An: Alex Betreff: Re: How to play an mp3 file from a database Hi Alex, At first, you are on windows and used the prebuklt libSDL binaries shipped with Alien::SDL? If yes, mp3 should be supported, but only files without VBR. So please try a few mp3 files and maybe check how it is encoded. Then, to play an mp3 file from a database, do somethind like: use DBI; use SDL; use SDL::Mixer; use SDL::Mixer::Channels; use SDL::Mixer::Samples; use SDL::RWOps; $dbh->prepare("SELECT music FROM ..."); $sth = $dbh->execute(); if( $row = $sth->fetchrow_hashref ) { $rwops = SDL::RWOps->new_const_mem( $row->{music} ); $chunk = SDL::Mixer::Samples::load_WAV_RW( $rwops, 0 ); SDL::Mixer::Channels::play_channel( -1, $chunk, 1 ); } Cheers, FROGGS Am 22.04.2012 18:35, schrieb Alex: > Dear all! > > It took me quite some time, but I'm moving forward. > Here are some screens from my vocabulary trainer: > https://picasaweb.google.com/104129024313554475104/Vokabeltrainer?auth > user=0 &authkey=Gv1sRgCKLyn6SSwIvCgwE&feat=directlink > > Now I want to play a vocable audio file (that is of course, stored in > a database :)). I can't use SDL::Mixer::Music for that, because there > is already some background music playing. AFAIK I need to use > SDL::Mixer::Samples. > I tried it, but there occurred an error when using mp3 files: "Cannot > load music file [music/terminal.mp3]: Unrecognized sound file type at > play_effect.pl line 34" > > Here is the script: > [code] > #!perl > use strict; > use warnings; > use utf8; > > use SDL; > use SDL::Event; > use SDL::Events; > use SDLx::App; > use SDLx::Controller; > use SDL::Mixer; > use SDL::Mixer::Music; > use SDL::RWOps; > use SDL::Mixer::Samples; > use SDL::Mixer::Channels; > SDL::init(SDL_INIT_AUDIO); > SDL::Mixer::init( MIX_INIT_MP3 | MUS_MP3 ); > > my $app = SDLx::App->new( > title => 'play mp3 effect', > exit_on_quit => 1, > ); > > unless( SDL::Mixer::open_audio( 44100, AUDIO_S16SYS, 2, 4096 ) == 0 ) { > Carp::croak "Cannot open audio: ".SDL::get_error(); } > > my $file = 'music/terminal.mp3'; > #my $file = 'music/br_crossing_bell_dop.r.wav'; > #my $file = 'music/Windows Logon Sound.wav'; my $sample = > SDL::Mixer::Samples::load_WAV( $file ); > > unless( $sample ) { > Carp::croak "Cannot load music file [$file]: " . SDL::get_error(); } > > my $playing_channel = SDL::Mixer::Channels::play_channel( -1, $sample, > 0 ); > > $app->run(); > > SDL::Mixer::Music::halt_music(); > SDL::Mixer::close_audio; > exit(0); > [/code] > > There also occurred some other errors using .wav files: > - Cannot load music file [music/br_crossing_bell_dop.r.wav]: Complex > WAVE files not supported at play_effect.pl line 34 > - Cannot load music file [music/Windows Logon Sound.wav]: MPEG Layer 3 > data not supported play_effect.pl line 34 > > But, I only want to play mp3 files. > > Maybe you can hint me at the solution for this problem? How can I play > an > mp3 file once, e.g. on a button click event? > > Best regards, > Alex > > -----Ursprüngliche Nachricht----- > Von: breno [mailto:oainikus...@gmail.com] > Gesendet: Dienstag, 29. November 2011 06:34 > An: Alexander Becker > Cc: sdl-devel@perl.org > Betreff: Re: How to play an mp3 file from a database > > On Mon, Nov 28, 2011 at 8:13 PM, Alexander Becker > <alexanderbec...@gmx.net> > wrote: >> Dear all! >> > Hi there! > >> I just tried the example code of the SDL Manual where you play some music. >> By the SDL manual, I refer to the one that is hidden at the bottom of >> the sdl.perl.org page, so that you really have to search for it in >> order to find it - and even then you have to get along with an ugly >> github > interface. > There's a new project website under way, but we're missing people to > work in it. Please join #sdl in irc.perl.org if you want to help us > get it right :) > >> So, in general: Is there a way to play mp3 files? > Yup. > > If your libsdl was compiled with mp3 support, all you have to do > (iirc) is set the MIX_INIT_MP3 (for effects) and MUS_MP3 (for audio) > flags when you call SDL::Mixer::init(): > > SDL::Mixer::init( MIX_INIT_MP3 | MUS_MP3 ); > > then use load_MUS() and play_music() from SDL::Mixer::Music to play > mp3 files as background music, or load_WAV() from SDL::Mixer::Samples > to play mp3 effects (yes, the function is named load_WAV() but plays > different formats too if they're available). > > The documentation in SDL::Mixer, SDL::Mixer::Music and > SDL::Mixer::Samples should be helpful, as some of the test files > (t/mixer_music.t comes to mind). > >> And in particular: is there a way to play mp3 files that are in a > variable? >> Or do I have to work with temporary files? >> > Not sure. I *think* SDL::Mixer::quick_load_WAV( $buffer ) might do the > right thing. You'll have to test it though. > > Cheers, > > breno > ----- eMail ist virenfrei. Von AVG überprüft - www.avg.de Version: 2012.0.1913 / Virendatenbank: 2411/4952 - Ausgabedatum: 22.04.2012