/// <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);
 }
示例#2
0
 /// <summary>
 /// На паузе ли сейчас воспроизведение?
 /// </summary>
 /// <param name="parWaveSound">Аудио ассет OpenTK</param>
 public bool IsPaused(AssetDataOpenTkWaveSound parWaveSound)
 {
     return(parWaveSound.AudioFormatProvider.IsPaused());
 }
示例#3
0
        /// <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");
            }
        }
示例#4
0
 /// <summary>
 /// Сбросить и перемотать воспроизведение
 /// </summary>
 /// <param name="parWaveSound">Аудио ассет OpenTK</param>
 public void Rewind(AssetDataOpenTkWaveSound parWaveSound)
 {
     parWaveSound.AudioFormatProvider.Reset();
 }
示例#5
0
 /// <summary>
 /// Остановить воспроизведение
 /// </summary>
 /// <param name="parWaveSound">Аудио ассет OpenTK</param>
 public void Stop(AssetDataOpenTkWaveSound parWaveSound)
 {
     parWaveSound.AudioFormatProvider.Stop();
 }
示例#6
0
 /// <summary>
 /// Приостановить воспроизведение
 /// </summary>
 /// <param name="parWaveSound">Аудио ассет OpenTK</param>
 public void Pause(AssetDataOpenTkWaveSound parWaveSound)
 {
     parWaveSound.AudioFormatProvider.Pause();
 }
示例#7
0
 /// <summary>
 /// Воспроизвести
 /// </summary>
 /// <param name="parWaveSound">Аудио ассет OpenTK</param>
 /// <param name="parIsLooped">Зациклить воспроизведение?</param>
 public void Play(AssetDataOpenTkWaveSound parWaveSound, bool parIsLooped = false)
 {
     parWaveSound.AudioFormatProvider.Play(parIsLooped);
 }
示例#8
0
 /// <summary>
 /// Установить флаг-признак зацикливания воспроизведения
 /// </summary>
 /// <param name="parWaveSound">Аудио ассет OpenTK</param>
 /// <param name="parIsLooped">Значение признака зацикливания воспроизведения</param>
 public void SetIsLooped(AssetDataOpenTkWaveSound parWaveSound, bool parIsLooped)
 {
     parWaveSound.AudioFormatProvider.SetIsLooped(parIsLooped);
 }