VBNet.Su - Visual Basic .NET. ASP .NET. Framework .NET.
Список форумов
Общий форум

Воспроизведение mp3 из данных в памяти

Быстрый переход:
Воспроизведение mp3 из данных в памяти15 декабря 2008 / 08:32
Ігор
Наш человек
ку 47.181654625+

вопросов: 8
советов: 9
ответов: 14
комментариев: 45


Как воспроизвести mp3 из данных в памяти точно так, как и обычные wav-файлы? Знает кто нибудь?

Кратко опишу процесс работы с wave-файлами, добавленными ресурсами в приложение.

Добавляем в каталог проекта файл, например, "sound.png".

Кликаем правой кнопкой мышки по значку проекта к примеру "WindowsApplication1" в "Solution Explorer" ... и добавляем в проект при помощи комманды "Add Existing Item".

А в окне свойств "Properties Window" изменяем свойство "Build Action" этого файла с "Content" на "Embedded Resource".

В vs2005-8 нечто подобное можно проделать при помощи редактора ресурсов.

В vb2002-3 воспроизвести звук встроенного wave-ресурса можно лишь пользуясь WIN32API функцией sndPlaySound

[c]<Flags()> Private Enum PlaySoundFlags
Sync = &H0 ' Синхронное воспроизведение (управление не передается до завершения)
NoDefault = &H2 ' Воспроизведение нестандартного звука
Memory = &H4 ' Воспроизведение звука в памяти
[Loop] = &H8 ' Зацикленное воспроизведение (до следующего вызова функции)
NoStop = &H10 ' Не останавливать звук, если уже воспроизводится
End Enum

' Фукция воспроизведения wave-файлов
Private Declare Auto Function sndPlaySound Lib "winmm.dll" _
(ByVal lpszSoundName As String, ByVal UFlags As Int32) As Int32

Private sound As String ' звук

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim stm As IO.Stream = Me.GetType().Assembly.GetManifestResourceStream(Me.GetType(), "sound.wav")
Dim stmreader As New IO.StreamReader(stm, System.Text.Encoding.Unicode)
sound = stmreader.ReadToEnd()
Call stmreader.Close()
Call sndPlaySound(sound, PlaySoundFlags.NoDefault Or PlaySoundFlags.Sync Or PlaySoundFlags.Memory)
End Sub[/c]

То, что звук в памяти воспроизводится лишь вызовом синхронного воспроизведения можно обойти, воспроизводя звук в отдельном потоке.

В vs2005-2008 звук в памяти можно также воспроизвести при помощи My.Computer.Audio.Play, при этом предусмотрено асинхронное воспроизведение звука в памяти. Однако воспроизводится не строка а байтовый массив.

  1. Private sound() As Byte ' звук
  2.  
  3. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.    Dim stm As IO.Stream = Me.GetType().Assembly.GetManifestResourceStream(Me.GetType(), "sound.wav")
  5.    ReDim sound(stm.Length - 1)
  6.    Call stm.Read(sound, 0, sound.Length)
  7.    Call stm.Close()
  8.    Call My.Computer.Audio.Play(sound, AudioPlayMode.Background)
  9. End Sub


Однако мы ж понимаем прекрасно, - mp3 хоть и не такой качественный звук, зато это экономно.

Может знает кнто нибудь, как вот примерно таким способом воспроизвести mp3.
..и было сказано:
Зачёт: Алексей Немиро
Это отдельная страница сообщения форума. Чтобы посмотреть всю ветку, нажмите на эту ссылку.