/// <summary> /// Инициализация и первоначальная загрузка аудио данных /// </summary> /// <param name="parLinkedOpenTkSound">Аудио данные OpenTK</param> public void InitAudioData(AssetDataOpenTkWaveSound parLinkedOpenTkSound) { OggPlayerInstance = new OggPlayerFBN(); // создаем проигрыватель Console.WriteLine($"Setting file path {parLinkedOpenTkSound.ActualAssetMetadata.FilePath}"); OggPlayerInstance.SetCurrentFile(parLinkedOpenTkSound.ActualAssetMetadata.FilePath); }
/// <summary> /// На паузе ли сейчас воспроизведение? /// </summary> /// <param name="parWaveSound">Аудио ассет OpenTK</param> public bool IsPaused(AssetDataOpenTkWaveSound parWaveSound) { return(parWaveSound.AudioFormatProvider.IsPaused()); }
/// <summary> /// Инициализация и первоначальная загрузка аудио данных /// </summary> /// <param name="parLinkedOpenTkSound">Аудио данные OpenTK</param> public void InitAudioData(AssetDataOpenTkWaveSound parOpenTkWaveSound) { _linkedAssetData = parOpenTkWaveSound; AlBuffer = AL.GenBuffer(); AlSource = AL.GenSource(); OpenAlManager.CheckForError("AL loading not ready..."); using (MemoryStream ms = new MemoryStream(AudioBinaryData)) { using (BinaryReader br = new BinaryReader(ms)) { // проверка заголовка RIFF string signature = new string(br.ReadChars(4)); if (signature != "RIFF") { throw new NotSupportedException("Specified stream is not a wave file."); } int riffChunckSize = br.ReadInt32(); string format = new string(br.ReadChars(4)); if (format != "WAVE") { throw new NotSupportedException("Specified stream is not a wave file."); } // проверка заголовка WAVE string formatSignature = new string(br.ReadChars(4)); if (formatSignature != "fmt ") { throw new NotSupportedException("Specified wave file is not supported."); } int formatChunkSize = br.ReadInt32(); int audioFormat = br.ReadInt16(); int numChannels = br.ReadInt16(); int sampleRate = br.ReadInt32(); int byteRate = br.ReadInt32(); int blockAlign = br.ReadInt16(); int bitsPerSample = br.ReadInt16(); string dataSignature = new string(br.ReadChars(4)); if (dataSignature != "data") { throw new NotSupportedException("Specified wave file is not supported."); } int dataChunkSize = br.ReadInt32(); Channels = numChannels; BitsPerSample = bitsPerSample; SampleRate = sampleRate; AudioBinaryData = br.ReadBytes((int)dataChunkSize); } } Console.WriteLine( $"Binary data length: {AudioBinaryData.Length}, Sample rate: {SampleRate}, {Environment.NewLine}BitsPerSample: {BitsPerSample}"); AL.BufferData(AlBuffer, GetSoundFormat(Channels, BitsPerSample), AudioBinaryData, AudioBinaryData.Length, SampleRate); if (!OpenAlManager.CheckForError($"Loading error: {_linkedAssetData.ActualAssetMetadata.FilePath}")) { } AL.Source(AlSource, ALSourcei.Buffer, AlBuffer); if (!OpenAlManager.CheckForError($"Loading error: {_linkedAssetData.ActualAssetMetadata.FilePath}")) { Console.WriteLine($"AL: Audio data {AlSource}:{AlBuffer} created in memory"); } }
/// <summary> /// Сбросить и перемотать воспроизведение /// </summary> /// <param name="parWaveSound">Аудио ассет OpenTK</param> public void Rewind(AssetDataOpenTkWaveSound parWaveSound) { parWaveSound.AudioFormatProvider.Reset(); }
/// <summary> /// Остановить воспроизведение /// </summary> /// <param name="parWaveSound">Аудио ассет OpenTK</param> public void Stop(AssetDataOpenTkWaveSound parWaveSound) { parWaveSound.AudioFormatProvider.Stop(); }
/// <summary> /// Приостановить воспроизведение /// </summary> /// <param name="parWaveSound">Аудио ассет OpenTK</param> public void Pause(AssetDataOpenTkWaveSound parWaveSound) { parWaveSound.AudioFormatProvider.Pause(); }
/// <summary> /// Воспроизвести /// </summary> /// <param name="parWaveSound">Аудио ассет OpenTK</param> /// <param name="parIsLooped">Зациклить воспроизведение?</param> public void Play(AssetDataOpenTkWaveSound parWaveSound, bool parIsLooped = false) { parWaveSound.AudioFormatProvider.Play(parIsLooped); }
/// <summary> /// Установить флаг-признак зацикливания воспроизведения /// </summary> /// <param name="parWaveSound">Аудио ассет OpenTK</param> /// <param name="parIsLooped">Значение признака зацикливания воспроизведения</param> public void SetIsLooped(AssetDataOpenTkWaveSound parWaveSound, bool parIsLooped) { parWaveSound.AudioFormatProvider.SetIsLooped(parIsLooped); }