21

あまりにも一般的な質問をしている場合は申し訳ありません。

モバイルデバイスでオーディオを録音および再生するアプリケーションを開発中です。このアプリケーションは、Android と iOS の両方で開発されています。アプリケーションは、デバイスのマイクを使用してオーディオを録音し、サーバーに保存します。

ユーザー (Android および iOS) はアプリケーションを開いて、サーバーに保存されているサウンドを再生できます。使用している音声フォーマットは AAC です。iOSでは正常に動作します。AACファイルを録音して再生できます。

しかし、Android (Samsung S3 および Samsung Galaxy Y) では、サウンドを AAC 形式で録音することはできません。しかし、S3 では AAC ファイルを再生できます。

私の質問は、Android (2.3 から Jellybean までをサポートする必要があります) と iOS で録音および再生するためにどの形式を選択する必要があるかということです。MP4 を使用する必要がありますか?

私たちが持っている 1 つの解決策は、バックエンド側でオーディオ ファイルを AAC、MP4、または 3GP に変換し、バージョンに基づいてサポートされているファイルをモバイルに提供することです。

4

7 に答える 7

31

Android と iOS は同じサーバーを使用してレコードを保存します。すべてのレコードは拡張子なしで保存されます。

Androidがサーバーからレコードをダウンロードすると、私のアプリは「.aac」拡張子を追加しますiOS
を使用する場合、「. m4a」拡張子が追加されます。

同じレコードが両方のモバイル プラットフォームで再生されます。

iOS での記録:

NSDictionary recorderSettings = [[NSDictionary alloc] initWithObjectsAndKeys:
                        [NSNumber numberWithInt:kAudioFormatMPEG4AAC], AVFormatIDKey,
                        [NSNumber numberWithInt:16000],AVSampleRateKey,
                        [NSNumber numberWithInt:1],AVNumberOfChannelsKey,
                        [NSNumber numberWithInt:16],AVLinearPCMBitDepthKey,
                        [NSNumber numberWithBool:NO],AVLinearPCMIsBigEndianKey,
                        [NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey,
                        nil];

アンドロイド用:

myRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
myRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
myRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
myRecorder.setAudioSamplingRate(16000);
myRecorder.setAudioChannels(1);
mRecorder.setOutputFile(fileName);
于 2015-10-26T12:05:25.897 に答える
13

私たちは最近、iOS と Android の両方からこの種の機能を記録し、iOS と Android の両方からリッスンする機能を備えた 1 つのアプリを完成させました。参照用に使用したコードを以下に示します。プラットホーム。

//iPhone side code. records m4a file format (small in size)

NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                                [NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey,
                                [NSNumber numberWithFloat:16000.0], AVSampleRateKey,
                                [NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
                                nil];
NSError *error = nil;
audioRecorder = [[AVAudioRecorder alloc] initWithURL:soundFileURL settings:recordSettings error:&error];

if (error)
    NSLog(@"error: %@", [error localizedDescription]);
else
    [audioRecorder prepareToRecord];


//Android side code. (records mp4 format and it works straight away by giving mp3 extension.)
MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.setAudioEncodingBitRate(256);
recorder.setAudioChannels(1);
recorder.setAudioSamplingRate(44100);
recorder.setOutputFile(getFilename());

try {
    recorder.prepare();
    recorder.start();
    myCount=new MyCount(thirtysec, onesecond);
    myCount.start();
    recordingDone=true;
    count=0;
    handler.sendEmptyMessage(0);
    if(progressDialog.isShowing())
        progressDialog.dismiss();
} catch (IllegalStateException e) {
    e.printStackTrace();
    StringWriter strTrace = new StringWriter();
    e.printStackTrace(new PrintWriter(strTrace));
    CrashReportActivity.appendLog(
                                  "\nEXCEPTION : \n" + strTrace.toString() + "\n",
                                  Comment.this);
} catch (IOException e) {
    e.printStackTrace();
    StringWriter strTrace = new StringWriter();
    e.printStackTrace(new PrintWriter(strTrace));
    CrashReportActivity.appendLog(
                                  "\nEXCEPTION : \n" + strTrace.toString() + "\n",
                                  Comment.this);
}

.Net で m4a から mp3 への変換コードを簡単に見つけることができます。

お役に立てれば。

于 2013-04-08T05:38:23.973 に答える
5

最近、この相互運用性の問題に直面しました。両方のプラットフォームでファイルを aac 形式で記録しようとしましたが、Samsung ハンドセットを使用して記録されたファイルは iOS では再生されませんでした。そのため、android と ios の複数のデバイスでファイルを再生するには、3gp と aac の両方の形式を使用する必要がありました。

以下は、Android でファイルを記録するときに使用したコードです。

    mRecorder = new MediaRecorder();
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    mRecorder.setOutputFile(fileName);

記録したファイルの拡張子は .3gp のままにしました。

ただし、iOS では 3gp での録音ができないため、両方のプラットフォームで再生できるように、iOS では .aac にファイルを録音しました。

于 2015-07-23T04:41:25.123 に答える
3

MPEG4 と AAC の組み合わせにより、すべてのオーディオが Android で再生されます。しかし、iOS では、Android のオーディオを再生できるように、ファイル拡張子として「m4a」を使用する必要がありました。

于 2015-11-17T23:42:55.637 に答える
-1

Android は出力形式MPEG 4とオーディオ エンコーダーAACを使用します。

iOS はkAudioFormatMPEGを使用します

于 2016-01-07T05:43:13.727 に答える