XM File --> String Concerter



  • Hallo zusammen,

    ich haben hier ein XM File (Sounddatei).
    Diese möchte ich direkt in mein Programm mit eincompilieren als String bzw. eindimensionales Array.

    Dazu suche ich einen passenden Converter. Gibt es sowas fertig oder muss ich mir sowas selber was basteln? die Datei ist 52kB.



  • Hallo

    Verwende lieber Resourcen.

    bis bald
    akari



  • Hi,

    habe ich schon probiert, allerdings habe ich Probleme damit und wollte deswegen mal ein Stringarray testen.



  • TeddyT schrieb:

    allerdings habe ich Probleme damit

    Dann versuche doch, deine Probleme zu lösen, anstatt einen völlig inadäquaten Workaround anzustreben.



  • hab es leider nicht hinbekommen und habe mir selber ein Script in PHP geschrieben. Funktioniert jetzt wunderbar.

    $FileRawData       = "Input.xm";
    $ConverterFileName = "Output.h";
    
    // Open and read raw data file
    $fHandleRaw = fopen ($FileRawData, "r");
    $RawData    = fread ($fHandleRaw, filesize($FileRawData));
    fclose( $fHandleRaw );
    
    // Create output file
    $fHandleConverter = fopen ($ConverterFileName, "w++");
    
    $strWrite = "unsigned char ucSongData[] = {\r\n";
    fwrite( $fHandleConverter, $strWrite, strlen($strWrite) );
    
    $LineCounter = 0;
    for( $Loop=0; $Loop<strlen($RawData); $Loop++ )
    {
    	if($LineCounter == 16 )
    	{
    		$LineFeed = "\r\n";
    		fwrite( $fHandleConverter, $LineFeed, strlen($LineFeed) );
    		$LineCounter = 0;
    	}
    
    	if( $Loop == strlen($RawData)-1 )
    		$strWrite = "0x".ascii2hex($RawData[$Loop]);
    	else
    	    $strWrite = "0x".ascii2hex($RawData[$Loop]).",";
    
    	fwrite( $fHandleConverter, $strWrite, strlen($strWrite) );
    
    	$LineCounter++;
    }
    
    $strWrite = "\r\n}";
    fwrite( $fHandleConverter, $strWrite, strlen($strWrite) );
    fclose( $fHandleConverter );
    
    function ascii2hex( $ascii ) 
    {
    	$hex = '';
    
    	for ( $i = 0; $i < strlen($ascii); $i++ ) 
    	{
    		$byte = strtoupper( dechex(ord($ascii{$i})) );
    		$byte = str_repeat( '0', 2 - strlen($byte) ).$byte;
    		$hex .= $byte;
    	}
    
    	return $hex;
    }
    


  • TeddyT schrieb:

    hab es leider nicht hinbekommen

    Herzlichen Glückwunsch.


Anmelden zum Antworten