Great! So I will add RWOps support today, I'll drop you a note when its done.
Cheers, FROGGS Am 30.11.2011 23:09, schrieb Alexander Becker: > 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 >