Hi! The example code in your link gives me version 1.2.11 on Win 7 x64 with strawberry perl 5.12.2 built for MSWin32-x64-multi-thread.
HTH, Alex [code] use SDL::Mixer; use SDL::Version; my $version = SDL::Mixer::linked_version(); printf("%d.%d.%d\n", $version->major, $version->minor, $version->patch); # prints "1.2.11" for me [/code] -----Ursprüngliche Nachricht----- Von: Tobias Leich [mailto:em...@froggs.de] Gesendet: Mittwoch, 30. November 2011 13:18 An: Alexander Becker Cc: 'breno'; sdl-devel@perl.org Betreff: Re: How to play an mp3 file from a database Hi, can you please check what version of libSDL_mixer do you have installed? http://sdl.perl.org/SDL-Mixer.html#linked_version In case you have 1.2.7 or better we can add support for RWOps objects. So you dont need temp files. Cheers, FROGGS Am 29.11.2011 20:37, schrieb Alexander Becker: > Hi breno, > > thank you for the quick response. It helped. > I had a look into mixer_samples.t and line 106 states, that > quick_load_WAV is not (yet? Who do I have to bribe with what to get it?) implemented. > > Here is a working piece of code using temporary files. Of course, you > need a database containing audio files. > > Best regards, > Alex > > [code] > #!perl > > use strict; > use warnings; > use utf8; > use DBI; > use SQL::Abstract::Limit; > use File::Temp; > use SDL; > use SDL::Audio; > use SDL::Mixer; > use SDL::Mixer::Samples; > use SDL::Mixer::Channels; > use SDL::Mixer::Music; > SDL::init(SDL_INIT_AUDIO); > SDL::Mixer::init( MIX_INIT_MP3 | MUS_MP3 ); > > unless( SDL::Mixer::open_audio( 44100, AUDIO_S16SYS, 2, 4096 ) == 0 ) { > Carp::croak "Cannot open audio: ".SDL::get_error(); } > > my $buffer = get_audio_buffer(); > > # -- write audio buffer to temp file > my $fh = File::Temp->new( UNLINK => 1, SUFFIX => '.mp3' ); > $fh->unlink_on_destroy( 1 ); print $fh $buffer; my $fname = > $fh->filename; > > # close the handle or the temfile will have some sort of lock on it > and cannot be read $fh->close(); > > my $background_music = SDL::Mixer::Music::load_MUS( $fname ); > > unless( $background_music ) { > Carp::croak "Cannot load music file [buffer from DB]: " . > SDL::get_error(); > } > > SDL::Mixer::Music::play_music( $background_music,0 ); > > sleep(6); > > SDL::Mixer::Music::halt_music(); > SDL::Mixer::close_audio; > exit(0); > > > > sub get_audio_buffer { > my $sql = SQL::Abstract::Limit->new( limit_dialect => 'LimitXY' > );; > > my $table = 'audio_files'; > my @fields = (qw/audio/); > my %where = ( > id => 2, > ); > my @order = (); > my $limit = 1; > my $offset = 0; > my ( $stmt, @bind ) = $sql->select( $table, \@fields, \%where, > \@order, $limit, $offset ); > my $database = 'database_name'; > my $db_host = 'your_host'; > my $db_port = '3306'; > my $dsn = "DBI:mysql:database=$database;host=$db_host;port=$db_port"; > my $username = 'username'; > my $password = 'password'; > my $dbh = DBI->connect($dsn, $username, $password) or die('Cannot > connect to DB: ' . DBI->errstr()); > my $sth = $dbh->prepare( $stmt ); > $sth->execute( @bind ); > > my ($buffer) = $sth->fetchrow_array(); > > return $buffer; > } # /get_audio_buffer > [/code] > > -----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 < > 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: 10.0.1411 / Virendatenbank: 2092/4046 - Ausgabedatum: > 29.11.2011 > ----- eMail ist virenfrei. Von AVG überprüft - www.avg.de Version: 10.0.1411 / Virendatenbank: 2102/4048 - Ausgabedatum: 30.11.2011