Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Асинхронная загрузка и воспроизведение аудиофайла


Автор: Georgich 4.1.2011, 01:40
Приветствую.

Делаю загрузку аудиофайла таким образом:
Код

              private void LoadTrack(string  downloadLink)
              {
                  using (WebClient webClient = new WebClient())
                  {
                      webClient.OpenReadAsync(new Uri("http://" + downloadLink));
                  }
              }

В отладчике прохожу, смотрю, код выполняется. Но, мне непонятно, если аудиозапись скачалась, то где она находится и откуда мне ее воспроизвести? Еще непонятен один момент: OpenReadAsync, вроде, работает, а вот OpenRead уже нет. От сервера приходит 404-ая ошибка. Интересно, почему так?

Спасибо.

Автор: Georgich 8.1.2011, 12:52
Подскажите, пожалуйста, может есть какие-то классы для воспроизведения аудио из мемори стрима, например, в процессе его загрузки из интернетов? Или как это вообще реализовать?

Спасибо. 

Автор: cream 10.1.2011, 18:48
Georgich,  так устроит?
Код

//using namespace Microsoft::DirectX::AudioVideoPlayback;
System::Void Listen_track_from_web() 
{
  try
  {
     Audio^ music_channel = gcnew Audio( "http://karakort.com/download.php?id=MjE4NTI2NjY=&file=Ulrich+Schnauss+%7C-Goodbye.mp3" );
     music_channel->Play();
  }
  catch ( Exception^ e )
  {
    MessageBox::Show( e->ToString() );
  }
}

Нужно указать рефференс на библиотеку DirectX, ну и неймспейс конечно.

Ссылку можно и не оставлять smile 

Автор: Georgich 12.1.2011, 13:46
Нашел такой способ воспроизведения:
http://efreedom.com/Question/1-184683/Play-Audio-Stream-Using-CSharp

Используется библиотека NAudio. Код там приведен. Но, воспроизведение там начинается только после полной загрузки файла в память. А вот сразу можно начать, используя этот метод или нет?

Спасибо.

Автор: cream 12.1.2011, 14:01
Georgich, не понимаю, чем не подходит мой пример?
Воспроизводит при загрузке файла, как вы и хотите. Или так важно сделать это в стриме?

Автор: Georgich 12.1.2011, 14:17
cream, как я понял надо качать и ставить DirectX SDK, которая под 500 мб. Может у вас есть DLL, которую надо подключать и с собой носить, а то уж как-то не хочется на комп этого монстра ставить.

Спасибо.

Автор: Georgich 7.2.2011, 21:22
Решение при помощи библиотеки BASS.NET:
Код

            IntPtr _myUserAgentPtr;
            _myUserAgentPtr = Marshal.StringToHGlobalAnsi(
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.12 (KHTML, like Gecko) Chrome/9.0.570.0 Safari/534.12");
            Bass.BASS_SetConfigPtr(BASSConfig.BASS_CONFIG_NET_AGENT, _myUserAgentPtr);

            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
            int channel = Bass.BASS_StreamCreateURL(url, 0, BASSFlag.BASS_DEFAULT, null, IntPtr.Zero);
            Bass.BASS_ChannelPlay(channel, false);

В моем случае User-Agent указывать необходимо, ибо сервер без него не отдает файл.

Автор: undelete 11.2.2011, 20:38
Здравствуйте! Пытаюсь сделать для себя проигрыватель радио на C#, попробовал тоже библиотеку Bass.Net:
Код

private void button1_Click(object sender, RoutedEventArgs e)
        {
            string url = @"http://cluster.quantumart.ru/broadcast/?media=dfm";
            IntPtr _myUserAgentPtr;
            _myUserAgentPtr = Marshal.StringToHGlobalAnsi("Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.12 (KHTML, like Gecko) Chrome/9.0.570.0 Safari/534.12");
            Bass.BASS_SetConfigPtr(BASSConfig.BASS_CONFIG_NET_AGENT, _myUserAgentPtr);

            if (Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero))
            {
                // create a stream channel from a file
                int stream = Bass.BASS_StreamCreateURL(url, 0, BASSFlag.BASS_DEFAULT, null, IntPtr.Zero);

                if (stream != 0)
                {
                    // play the stream channel
                    Bass.BASS_ChannelPlay(stream, false);

                }
                else
                {
                    // error creating the stream
                    MessageBox.Show("Stream errore: " + Bass.BASS_ErrorGetCode());
                }
                // free the stream
                Bass.BASS_StreamFree(stream);
                // free BASS
                Bass.BASS_Free();
            }
        }


но выдает ошибку : "Stream errore: BASS_ERROR_FILEFORM", подскажите как исправить!

Автор: Georgich 12.2.2011, 13:06
undelete, эта ошибка означает, что:
Код

The file's format is not recognised/supported.

Советую посмотреть вам пример, который называется NetRadio.cs, возможно, он вам поможет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)