Thanks froggs.

Sent from my iPhone

On 2011-12-01, at 5:25 AM, Tobias Leich <em...@froggs.de> wrote:

> 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
>>
>

Reply via email to