アンドロイド用のXamarinアプリからカスタム生成音を再生する必要があります。私の現在のコードは次のようになります。カスタム生成されたサウンドを再生する - AudioTrack.playが例外をスローする
public class NotePlayer {
private const int sampleRate = 44100;
private const int bufferSize = 22050;
private Task<AudioTrack> track = null;
public double Frequency { get; private set; }
public NotePlayer(double frequency) {
this.Frequency = frequency;
}
public void Play() {
short[] source = new short[bufferSize/2];
for(int i= 0; i<source.Length; i++) {
source[i] = (short)(Math.Sin(((double)i)/sampleRate * Frequency* Math.PI*2)*Int16.MaxValue);
}
var track = new AudioTrack(Stream.Music, sampleRate, ChannelOut.Mono, Android.Media.Encoding.Pcm16bit, bufferSize, AudioTrackMode.Static);
track.Write(source, 0, bufferSize);
track.SetLoopPoints(0, bufferSize/2, -1);
track.Play();
this.track = Task.FromResult(track);
}
//Some more methods here
}
問題は、私は()ラインtrack.playにJava.Lang.IllegalStateException: play() called on uninitialized AudioTrack.
例外を得続けることです。
this私は自分のサンプルのエンディアン性で何かをしなければならないかもしれないことを理解したところから質問しましたが、この点で問題ではありませんし、受け入れられた回答のコードも、私はさらに混乱してしまいます。 SetLoopPoints
の行を完全に似ているようにコメントしてみても、助けにはならなかった。
アンドロイド5.1でテスト済みです。