You are not logged in.

  • Login

7x1ubiats12

Unregistered

1

Friday, January 1st 2010, 1:51am

ALLEGRO, seine "AllegroMP3 v2.0.4"-Bibliothek und mein Problem !

/* Hallo. Ich habe Gegoogled wie ein verrückten aber keine Antwort darauf gefunden, wie man diese Mp3-bibliothek zum laufen bekommt.
Die Readme habe ich auch gelesen und auch alles so umgesetzt wie beschrieben. Wahrscheinlich habe ich einen kleinen Fehler gemacht der mir jetzt grade nicht auffällt.
Nun bitte ich doch recht herzlich um Hilfe wie ich diese Mp3 von mir (3.2 MB) mit ALLEGRO zum laufen kriege. */

C/C++ Quellcode

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
/*Ich arbeite mit den Dev-C++ 4.9 Compiler für Windows. 
Allegro ist richtig installiert und nutzbar.
Mit den Linker sind die Bibliotheksdateien 
libalmp3.a(für mp3) und liballeg.a(für Allegro)
in dieser Reihenfolge verbunden.*/
 
#include <almp3.h> 
#include <allegro.h>
 
int main(void){
allegro_init() ;
char *puffer = "6.mp3" ;
 
 
install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) ;
 
 
ALMP3_MP3 *musik = almp3_create_mp3(puffer,4000) ;
 
 
// Ich glaube hier müsste irgendwo der Fehler sein,
// weil wenn ich diese Zeile lösche läuft das Programm
// normal, zeigt aber nur die Nachricht an. 
almp3_play_mp3(musik,4000,255,255) ; 
 
 
allegro_message("MUSIK TEST") ;
 
 
}END_OF_MAIN() ;


Hier ein Auszug aus der readme Datei.

Using AllegroMP3
----------------

To be able to use AllegroMP3 with your program, you just need (once
compiled the library) to link the generated lib with your program
(remember that since this lib relies on allegro, you need to add
almp3 *before* alleg) and include the header "almp3.h", available in
the lib and include directories respectively.


Reference
---------

Note parameters are marked between ' ' markers.


Differences between ALMP3_MP3 and ALMP3_MP3STREAM:
With ALMP3_MP3 you will be able to know the mp3 length, seek in the
file (directly), and multiple other things, BUT you'll need to load
the whole file in memory and keep it there until you stop playing it.
With ALMP3_MP3STREAMs you won't be able to do that (well, you will be
able to do seeking but in a special way), BUT you'll be able to load
just small chunks of data, very alike Allegro's AUDIOSTREAMs do, saving
memory and loading time.


ALMP3_MP3 *almp3_create_mp3(void *data, int data_len);
Creates an ALMP3_MP3 which you'll have to pass to all the other
functions, where 'data' will be a pointer to the buffer containing
the mp3 data and 'data_len' the size of this buffer. Note you aren't
supposed to free this buffer until you have destroyed the ALMP3_MP3.

return values:
NULL if there ocurred an error (mostly an invalid mp3 data was passed).
Other value ( != NULL ) otherwise.


void almp3_destroy_mp3(ALMP3_MP3 *mp3);
Destroys the ALMP3_MP3 automatically stopping it. Note this function
check if the 'mp3' pointer is pointing to NULL, so for example this:
ALMP3_MP3 *mp3 = NULL;
destroy_mp3(mp3);
won't crash the program.


int almp3_play_mp3(ALMP3_MP3 *mp3, int buffer_len, int vol, int pan);
Plays the 'mp3' ALMP3_MP3 with the given volume 'vol' (from 0 to 255)
and panning 'pan' (from 0 to 255, where 0 is full left and 255 is
full right). 'buffer_len' is the desired size in bytes of the
buffer where the decoded data will be stored. The bigger, the less
you'll have to poll the MP3, but the more time you will have to wait
in order to hear the song start playing. Note that due to some
mp3 format limitations, the internal (and real) buffer will be
an aproximation to the 'buffer_len' given. A 'buffer_len' size between
16384 and 32768 bytes (16kb and 32kb) will do in most cases.

return values:
ALMP3_OK if no problems.
ALMP3_PLAY_BUFFERTOOSMALL if the given 'buffer_len' was not big enough.

special note:
This function also works like a "resume" function, since it
won't rewind the ALMP3_MP3 automatically. Note that once the ALMP3_MP3
has reached the end when playing, it will rewind though, stoping the
ALMP3_MP3 if the loop flag was set at FALSE (see almp3_play_ex_mp3())
or continuing playing it if it was set at TRUE. Also note that this
automatically stops decoding.

Danke für Hilfe und frohes neues. :-)

2

Monday, January 4th 2010, 9:07pm

Überprüf' mal ob musik NULL ist.

Das Problem ist, dass du almp3_create_mp3 mit falschen ersten Parameter aufrufst:

Quoted

ALMP3_MP3 *almp3_create_mp3(void *data, int data_len);
Creates an ALMP3_MP3 which you'll have to pass to all the other
functions, where 'data' will be a pointer to the buffer containing
the mp3 data
and 'data_len' the size of this buffer. Note you aren't
supposed to free this buffer until you have destroyed the ALMP3_MP3.


Ausserdem sollte data_len die wirkliche Länge von data enthalten. Sonst gibt's womöglich Laufzeitüberraschungen.

Btw.: ein Fehlerbericht wäre toll, dann hätte sicherlich schon früher jemand geantwortet :)

7x1ubiats12

Unregistered

3

Tuesday, January 5th 2010, 5:17pm

Danke für die Antwort. Läuft trotzdem nicht.
Wie soll ich einen Fehlerbericht zeigen wenn keiner da ist. ;-)

Ich habe ein paar änderungen vorgenommen.
Tut sich aber immernoch nix. :-(

C/C++ Quellcode

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
/* Ich habe das jetzt soweit geändert wie beschrieben und da tut
   sich trotzdem nix.
   Das Programm startet kurz und schließt sich dann wieder.
   Keine Fehlermeldung oder sonstwas.
*/
 
#include <almp3.h> 
#include <allegro.h>
 
int main(void){
	allegro_init() ;
 
 
	const void *puffer = "musik.mp3" ;
	void *z_puffer = &puffer ;
 
	install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) ;
 
	// Ich glaube hier müsste irgendwo der Fehler sein,
	// weil wenn ich diese 3 Zeilen lösche läuft das Programm
	// normal, zeigt aber nur die Nachricht an. :) 
	ALMP3_MP3 *musik = NULL ;
	musik = almp3_create_mp3(z_puffer,3450000) ;
	almp3_play_mp3(musik,3450000,200,200) ; 
 
 
	//Testnachricht.
	allegro_message("MUSIK TEST") ;
 
 
}END_OF_MAIN() ;

7x1ubiats12

Unregistered

4

Wednesday, January 6th 2010, 1:35am

DAS MUSS DOCH IRGENDWIE ZU LÖSEN SEIN,DASS MAN MP3 MIT ALLEGRO NUTZT. KANN DOCH NICHT SEIN,DASS HIER SO VIELE LEUTE SIND DIE PROGRAMMIEREN UND KEINE ANTWORT AUF SO NE ANFÄNGER FRAGE HABEN.
:(

7x1ubiats12

Unregistered

5

Wednesday, January 6th 2010, 7:47pm

So langsam wird es langweilig.

Also. So langsam kriege ich echt nen Hals, dass ich das nicht auf die Reihe kriege diese Mp3 zum laufen zu bekommen.
Jetzt habe ich das mit nen PACKFILE probiert und das Programm stürzt nicht ab, zeigt auch den Text nur höre ich keinen Sound.
Vielleicht mache ich ja beim einbinden der lib-files schon was falsch oder habe eine header Datei vergessen aber dann würde ja normalerweise
eine Fehlermeldung kommen. Muss man vielleicht den Sound anders installieren als ich es gemacht habe? ... so langsam kommen da die ersten Tränen :-(
Ich frage mich mittlerweile ob sich daß überhaubt noch lohnt weiter zu probieren weil ich mich so in diese Sache vertiefe, dass ich anderwertig nicht weiter komme...Muss ich mich dann damit abfinden , dass ich nur wav. Dateien spielen kann. ? ! So ein mißt.

C/C++ Quellcode

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <almp3.h>
#include <allegro.h> 
#include <stdio.h>
 
int main(void) {
 
	allegro_init( ) ;
 
	install_keyboard( ) ;
	install_mouse( ) ;
	install_sound( DIGI_AUTODETECT, MIDI_AUTODETECT, NULL ) ;
 
 
	// -----------------------Sound----------------------------------
	char *Mp3Datei = "musik.mp3" ;
	ALMP3_MP3 *mp3 ;
 
	// Öffnet eine PACKDATEI mit der Mp3Datei "musik.mp3".
	PACKFILE *pack = pack_fopen( Mp3Datei, "r" ) ;
         	if( ! Mp3Datei )
	         	printf( " :-( \n" );
 
	// Größe des Mp3Datei-files festlegen. Die Ausgabe von printf als Integer ist 3437714.
	int size = file_size( Mp3Datei ) ;   	
           	printf("%d", file_size( Mp3Datei ) ) ;	
 
	//  ???  Die Ausgabe von printf als Integer ist 30867488.
	char *mp3data = new char[ size ] ;
                	printf( "\n%d", new char [ size ] ) ;  
 
	// Fügt die PACKDATEI in die Größe [size]. 
	size = pack_fread( mp3data, size, pack ) ; 
 
	// Schließt den PACKDATEI Vorgang.
	pack_fclose( pack ) ;
 
 
	if ( ( mp3 = almp3_create_mp3 ( mp3data, size ) ) == NULL )
      	printf("almp3_create_mp3 failed\n");
 
 
	if(mp3)
	  	{
	    	printf("Playing...\n");
	    	if(almp3_play_ex_mp3(mp3, 32768, 255, 127, 1000, 0) == ALMP3_PLAY_BUFFERTOOSMALL)
	      	printf("ALMP3_PLAY_BUFFERTOOSMALL\n");
	  	}
 
	allegro_message("MUSIKTEST") ;
 
 
 
} END_OF_MAIN() ;

6

Thursday, January 7th 2010, 1:00pm

Ich hab nie mit Allegro zutun gehabt (und da die Seite mit der mp3-lib offline ist, kann ich den Quelltext gerade nicht selbst ausprobieren)

Aber zum vorletzten Quelltext: "a pointer to the buffer containing the mp3 data" ist kein Pointer auf den Dateinamen.
Du müsstest die Datei komplett einlesen und dann erst dann via almp3_create_mp3 ausgeben (fopen, fread, fclose).

Zum letzten Quelli: Soweit ich das sehe sind "PACKFILEs" komprimiert ... In deinem Fall versucht die Bibliothek eine mp3 zu dekomprimieren ... das läuft natürlich schief. Da musst du entweder die mp3 in eine entsprechend komprimierte Datei schmeißen oder auf PACKFILEs verzichten.

7x1ubiats12

Unregistered

7

Monday, January 25th 2010, 9:59pm

Weiss hier nun jemand eine Antwort drauf ? Diese Frage ist so weit nach hinten gerutscht zwischen den ganzen anderen, deshalb frage ich noch mal nach ?

8

Thursday, January 28th 2010, 10:10am

Ich hab mich nicht reingekniet, nur so bischen überflogen was die Suchmaschine so rauswirft.

Ist es folgende Info, die du in dein Programm anpassen/einbauen solltest?
http://www.allegro.cc/forums/thread/591367/672060#target

MfG bcc-fan

9

Sunday, February 21st 2010, 8:19pm

Man muss sich auch nicht unbedingt mit dieser AllegroMp3 Bibliothek herumschlagen, weil die wirklich total schwer und kompliziert zu verstehen ist und selbst dann meist nicht klappt. Es gibt viel leichtere und gleichzeitig auch bessere Alternativen, die man dir schon hätte viel früher vorschlagen können. Auch wenn du nicht an Board bist Marcel, ich weiß du bist hier und guckst ab und zu vorbei :) ... OpenAL um eine zu nennen. Aber wahrscheinlich, so wie ich dich kenne, hast du das mittlerweile schon selbst gelöst. Biss dann.

Social bookmarks