private void ParseAudioData() { byte[] wavBuffer = AudioConvert.ConvertToWav(audio); int channelCount = wavBuffer[22]; int pos = 12; while (!(wavBuffer[pos] == 100 && wavBuffer[pos + 1] == 97 && wavBuffer[pos + 2] == 116 && wavBuffer[pos + 3] == 97)) { pos += 4; int chunkSize = wavBuffer[pos] + wavBuffer[pos + 1] * 256 + wavBuffer[pos + 2] * 65536 + wavBuffer[pos + 3] * 16777216; pos += 4 + chunkSize; } pos += 8; lengthSamples = (wavBuffer.Length - pos) / 2; pcmData = new float[lengthSamples]; int idx = 0; while (pos < wavBuffer.Length) { pcmData[idx] = BytesToFloat(wavBuffer[pos], wavBuffer[pos + 1]); pos += 2; idx++; } }
public void Play(RTMAudioData data) { #if UNITY_ANDROID if (AudioRecord != null) { AudioRecord.Call("broadAudio", AudioConvert.ConvertToWav(data.Audio)); } #elif (UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN) byte[] wavBuffer = AudioConvert.ConvertToWav(data.Audio); startPlay(wavBuffer, wavBuffer.Length, PlayFinishCallback); #else startPlay(data.Audio, data.Audio.Length, PlayFinishCallback); #endif }
private void ParseAudioData(byte[] audio) { rtmAudioHeader = new RTMAudioHeader(); int offset = 0; if (audio.Length < 4) { return; } rtmAudioHeader.version = audio[0]; rtmAudioHeader.containerType = (RTMAudioHeader.ContainerType)audio[1]; rtmAudioHeader.codecType = (RTMAudioHeader.CodecType)audio[2]; byte infoDataCount = audio[3]; offset += 4; for (byte i = 0; i < infoDataCount; i++) { int sectionLength = BitConverter.ToInt32(audio, offset); offset += 4; Dictionary <Object, Object> infoData = MsgUnpacker.Unpack(audio, offset, sectionLength); object value; if (infoData.TryGetValue("lang", out value)) { rtmAudioHeader.lang = (string)value; } if (infoData.TryGetValue("dur", out value)) { rtmAudioHeader.duration = Convert.ToInt64(value); duration = rtmAudioHeader.duration; } if (infoData.TryGetValue("srate", out value)) { rtmAudioHeader.sampleRate = Convert.ToInt32(value); frequency = rtmAudioHeader.sampleRate; } offset += sectionLength; } if (offset >= audio.Length) { return; } byte[] amrBuffer = new byte[audio.Length - offset]; Array.Copy(audio, offset, amrBuffer, 0, audio.Length - offset); byte[] wavBuffer = AudioConvert.ConvertToWav(amrBuffer); int channelCount = wavBuffer[22]; int pos = 12; while (!(wavBuffer[pos] == 100 && wavBuffer[pos + 1] == 97 && wavBuffer[pos + 2] == 116 && wavBuffer[pos + 3] == 97)) { pos += 4; int chunkSize = wavBuffer[pos] + wavBuffer[pos + 1] * 256 + wavBuffer[pos + 2] * 65536 + wavBuffer[pos + 3] * 16777216; pos += 4 + chunkSize; } pos += 8; samples = (wavBuffer.Length - pos) / 2; pcmData = new float[samples]; int idx = 0; while (pos < wavBuffer.Length) { pcmData[idx] = BytesToFloat(wavBuffer[pos], wavBuffer[pos + 1]); pos += 2; idx++; } }