2011-07-13 26 views
4

私は現在、OpenALを使用してゲーム音楽を再生しています。それは生のWAVファイルを除いて何も動作しないことを除いて、うまく動作します。これは〜9MBのサウンドトラックで終わることを意味します。AudioToolbox/OpenAL音声ファイルを再生するためのExtAudioFile

私はOpenALが新しく、Appleの例(https://developer.apple.com/library/ios/#samplecode/MusicCube/Listings/Classes_MyOpenALSupport_h.html%23//apple_ref/doc/uid/DTS40008978-Classes_MyOpenALSupport_h-DontLinkElementID_9)のコードを直接使用してバッファデータを取得しています。

質問:この機能を変更して、圧縮されたオーディオを読み取り、その場でデコードする方法はありますか?
私はオーディオファイルフォーマットについて心配していません。再生可能で圧縮されている限り(mp3、aac、cafなど)私がこれを(勿論)したいのは、ファイルサイズを減らすことだけです。

編集:私はバッファを取得するために使用している方法としてOpenALで問題はあまりないようです。 https://developer.apple.com/library/ios/#samplecode/MusicCube/Listings/Classes_MyOpenALSupport_h.html%23//apple_ref/doc/uid/DTS40008978-Classes_MyOpenALSupport_h-DontLinkElementID_9の関数は、AudioFileOpenURLAudioFileReadBytesを使用します。 ExtAudioFileOpenURLExtAudioFileReadを使用して私のためのオーディオをデコードするためのフレームワークを得る方法はありますか?

私はここでコードを試しました:https://devforums.apple.com/message/10678#10678、しかし私はそれを作るべきか分かりません。私がバッファを取得するために使用する関数はhttps://developer.apple.com/library/ios/#samplecode/MusicCube/Listings/Classes_MyOpenALSupport_h.html%23//apple_ref/doc/uid/DTS40008978-Classes_MyOpenALSupport_h-DontLinkElementID_9であり、実際には変更していないので、これをビルドする必要があります。

私は本当にこれが必要なので、私は賞金を始めました、うまくいけば、誰かが私を正しい方向に向けることができます。

+0

純粋なOpenALを使用してサウンドを再生する必要がありますか?なぜあなたはCocosDenshionのようなボックスの外で動作するものを使用しないと、それはあなたにたくさんの心配を節約します。 http://www.cocos2d-iphone.org/wiki/doku.php/cocosdenshion:faq –

答えて

4

他の形式をロードするには、オーディオサービスを使用する必要があります。 OpenALは圧縮されていないPCMデータのみをサポートしているので、ロードするデータはロード中に解凍する必要があることに注意してください。それは、ディスクから直接圧縮オーディオを果たしているので、あなたはAVAudioPlayerを、圧縮されたサウンドトラックタイプのオーディオをストリーミング使用する場合https://github.com/kstenerud/ObjectAL-for-iPhone/blob/master/ObjectAL/ObjectAL/Support/OALAudioFile.m

は、ここでのiOSでサポートされている任意のフォーマットをロードするいくつかのコードです。

+0

私がこれを使うと、どのように参照/クレジットを与えるのですか? – Greg

+0

それは私のコードです。ソースのコメントに元のリンクを残しておけば十分です。 – Karl

+0

そして、もしこのソースがApp Storeの私のiPhoneアプリでコンパイルされたら? – Greg

0

てみてください、これが動作するかどうか:

その後、あなたはchar *型にバッファをmp3、oggのをロードするために、サードパーティのライブラリを使用しようとする可能性があり
+0

私はそれを見ています。ありがとう。 – Greg

0

、およびhttp://kcat.strangesoft.net/openal-tutorial.htmlはOpenALのにこのバッファを与えます。それはファイルサイズの問題を解決します。 OGGのために

、あなたはmp3のために彼らのwebsite

上のライブラリを見つける必要があり、私は正直にそれを行うことができ、軽量ライブラリを見つけることがどこか分かりません。しかし、それは存在するはずです。

3

アーカイブファイルを開くためにサードパーティのライブラリは必要ありません。 AudioToolbox/AudioToolbox.hフレームワークの少しの助けを借りて、パフォーマンス(圧縮解除中のCPUの影響を最小限に抑える)の点で、良い方法である.cafファイルのデータを開いて読み込むことができます(mp3やoggよりも良い)。したがって、データがOpenALに到達すると、それはすでにPCMであり、バッファを満たす準備ができています。カールの回答に基づいて

-(void) prepareFiles:(NSString *) filePath{ 

    // get the full path of the file 
    NSString* fileName = [[NSBundle mainBundle] pathForResource:filePath ofType:@"caf"];  

    // open the file using the custom created methods (see below) 
    AudioFileID fileID = [self openAudioFile:fileName];  
    preparedAudioFileSize = [self audioFileSize:fileID]; 

    if (preparedAudioFile){ 
     free(preparedAudioFile); 
     preparedAudioFile = nil; 
    } 
    else{ 
     ; 
    } 
    preparedAudioFile = malloc(preparedAudioFileSize); 

    //read the data from the file into soundOutData var 
    AudioFileReadBytes(fileID, false, 0, &preparedAudioFileSize, preparedAudioFile); 
    //close the file  
    AudioFileClose(fileID); 
} 



-(AudioFileID)openAudioFile:(NSString*)filePath 
{ 
    AudioFileID fileID; 
    NSURL * url = [NSURL fileURLWithPath:filePath]; 
    OSStatus result = AudioFileOpenURL((CFURLRef)url, kAudioFileReadPermission, 0, &fileID); 

    if (result != noErr) { 
     NSLog(@"fail to open: %@",filePath); 
    } 
    else { 
     ; 
    } 
    return fileID; 
} 


-(UInt32)audioFileSize:(AudioFileID)fileDescriptor 
{ 
    UInt64 outDataSize = 0; 
    UInt32 thePropSize = sizeof(UInt64); 
    OSStatus result = AudioFileGetProperty(fileDescriptor, kAudioFilePropertyAudioDataByteCount, &thePropSize, &outDataSize); 
    if(result != 0) NSLog(@"cannot find file size"); 
    return (UInt32)outDataSize; 
} 
1

は、上記の、私がファイルを開くとバック(OpenALのに適した)PCMオーディオのバッファをあなたを与える最小限の単一のC++の関数を作った:ここでは、この達成することができます方法についていくつかのサンプルコードはありますOpenALサウンド(フォーマット、サンプレート、バッファサイズなど)を作成するために必要なすべての情報が含まれています。

必要な2つのファイルがここにある: https://gist.github.com/ofTheo/5171369

はそれが役に立てば幸い! theo

関連する問題