public SimplePhraseMessenger(TextToSpeech speechEngine, string phrase, int numRepeats) { this.speechEngine = speechEngine; this.phrase = phrase; this.numRepeats = numRepeats; AudioAttributes.Builder b = new AudioAttributes.Builder(); b.SetFlags(AudioFlags.LowLatency); b.SetUsage(AudioUsageKind.Alarm); b.SetContentType(AudioContentType.Speech); AudioAttributes audioAttributes = b.Build(); speechEngine.SetAudioAttributes(audioAttributes); }
private AudioTrack GetAudioTrack() { ChannelOut channelOut = _channels == 2 ? ChannelOut.Stereo : ChannelOut.Mono; Encoding encoding = Encoding.Pcm16bit;; int bufferSize = AudioTrack.GetMinBufferSize(_sampleRate, channelOut, encoding) * 2; AudioTrack audioTrack; AudioAttributes.Builder attributesBuilder = new AudioAttributes.Builder() .SetUsage(AudioUsageKind.Game); AudioFormat format = new AudioFormat.Builder() .SetEncoding(encoding) .SetSampleRate(_sampleRate) .SetChannelMask(channelOut) .Build(); if (Build.VERSION.SdkInt < BuildVersionCodes.O) { attributesBuilder.SetFlags(AudioFlags.LowLatency); } if (Build.VERSION.SdkInt >= BuildVersionCodes.O) { AudioTrack.Builder trackBuilder = new AudioTrack.Builder() .SetAudioFormat(format) .SetAudioAttributes(attributesBuilder.Build()) .SetTransferMode(AudioTrackMode.Stream) .SetBufferSizeInBytes(bufferSize); trackBuilder.SetPerformanceMode(AudioTrackPerformanceMode.LowLatency); audioTrack = trackBuilder.Build(); } else { audioTrack = new AudioTrack(attributesBuilder.Build(), format, bufferSize, AudioTrackMode.Stream, AudioManager.AudioSessionIdGenerate); } return(audioTrack); }