• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

NAudio - Thao tác với âm thanh

Bộ sưu tập các thư viện hỗ trợ sẳn cho Visual Basic .NET và C#

Điều hành viên: tungcan5diop, QUANITGROBEST

Nội qui chuyên mục
1. Gửi bài viết tại đây, Tester sẽ chuyển vào trong nếu bài viết đạt yêu cầu.
2. Gửi bài theo mẫu qui định: viewtopic.php?f=2&t=5
[ten][/ten]
[loai][/loai]
[ngonngu][/ngonngu]
[tacgia][/tacgia]
[chucnang][/chucnang]
[end][/end]
Uzumaki Naruto
Thành viên danh dự
Thành viên danh dự
Bài viết: 839
Ngày tham gia: T.Hai 30/04/2007 9:55 pm
Đến từ: Sài Gòn
Has thanked: 7 time
Been thanked: 83 time

NAudio - Thao tác với âm thanh

Gửi bàigửi bởi Uzumaki Naruto » CN 18/11/2012 3:16 pm

Tên: NAudio
Loại: DLL
Ngôn ngữ lập trình: .NET
Tác giả: Sưu tầm
Chức năng: Play Wav, Play MP3, Lấy thông tin file âm thanh, set Volume chính,....


Có một bạn hỏi nhiều câu hỏi về thao tác với âm thanh, thì mình có post lên một vài cái code dùng API để thao tác. Mà có lẽ là dùng API để làm việc với âm thanh thì nó hơi dài dòng và cũng khó chịu cho các bạn mới làm quen nên mình lên Google tìm kiếm thì tìm được cái DLL này. Post lên diễn đàn để ai cần thao tác với âm thanh thì cũng dễ hơn.
Để tiện cho các bạn Demo thì mình cũng viết sẵn một cái code sử dụng NAudio để Play MP3, Lấy mức Volume hệ thống và điều chỉnh Volume hệ thống.

HƯỚNG DẪN ADD DLL VÀO PROJECT: (cần làm thì mới dùng được)
- Từ cửa số của Visual Studio, các bạn vào menu Projects, chọn Add Reference.
- Ở cửa sổ hiện ra bạn vào tab Browse, rồi nhấn nút Browse trỏ đến file NAudio.dll (sẽ có được khi bạn giải nén file mình đính kèm dưới đây), sau đó nhấn OK.

Đây là code demo như mình đã nói ở trên:
  1. Imports aud = NAudio.CoreAudioApi 'Bắt buộc
  2. Imports nwav = NAudio.Wave 'Bắt buộc
  3. Public Class Form1
  4.     Dim tb As New TrackBar
  5.     Dim lb As New Label
  6.     Dim device As aud.MMDevice
  7.     Dim waveOutDevice As nwav.IWavePlayer
  8.     Dim mainOutputStream As nwav.WaveStream
  9.     Dim volumeStream As nwav.WaveChannel32
  10.  
  11.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  12.         Dim DevEnum As New aud.MMDeviceEnumerator()
  13.         device = DevEnum.GetDefaultAudioEndpoint(NAudio.CoreAudioApi.DataFlow.Render, NAudio.CoreAudioApi.Role.Multimedia)
  14.         tb.Maximum = 100
  15.         tb.Minimum = 0
  16.         'Lấy giá trị của MasterVolume gán cho một trackbar
  17.         tb.Value = CInt(device.AudioEndpointVolume.MasterVolumeLevelScalar * 100)
  18.         '----------------------------------------------------
  19.         lb.Text = tb.Value
  20.         Me.Controls.Add(tb)
  21.         Me.Controls.Add(lb)
  22.         lb.Location = New Point(tb.Location.X, tb.Location.Y + tb.Size.Height)
  23.         AddHandler (tb.Scroll), AddressOf TrackBar_Scroll
  24.         'Tạo sự kiện để theo dõi việc Master Volume thay đổi -> giá trị Trackbar cũng thay đổi
  25.         AddHandler (device.AudioEndpointVolume.OnVolumeNotification), AddressOf OnVolumeNotification
  26.         '-------------------------------------------------------------------------------------
  27.         'Chuẩn bị để Play file mp3
  28.         waveOutDevice = New nwav.WaveOut()
  29.         mainOutputStream = CreateInputStream("E:\Music\Audio Music\safe.mp3")
  30.         waveOutDevice.Init(mainOutputStream)
  31.         waveOutDevice.Play()
  32.         '-------------------------------------------------------------------------------------
  33.     End Sub
  34.  
  35.     Private Function CreateInputStream(ByVal fileName As String) As nwav.WaveStream
  36.         Dim inputStream As nwav.WaveChannel32
  37.         If (fileName.EndsWith(".mp3")) Then
  38.             Dim mp3Reader As nwav.WaveStream = New nwav.Mp3FileReader(fileName)
  39.             inputStream = New nwav.WaveChannel32(mp3Reader)
  40.         Else
  41.             Throw New InvalidOperationException("Unsupported extension")
  42.         End If
  43.         volumeStream = inputStream
  44.         Return volumeStream
  45.     End Function
  46.  
  47.     Private Sub TrackBar_Scroll(sender As Object, e As EventArgs)
  48.         device.AudioEndpointVolume.MasterVolumeLevelScalar = tb.Value / 100
  49.     End Sub
  50.  
  51.     Private Sub OnVolumeNotification(data As aud.AudioVolumeNotificationData)
  52.         If Me.InvokeRequired Then
  53.             Me.Invoke(New aud.AudioEndpointVolumeNotificationDelegate(AddressOf OnVolumeNotification), data)
  54.         Else
  55.             tb.Value = CInt(data.MasterVolume * 100)
  56.             lb.Text = tb.Value
  57.         End If
  58.     End Sub
  59. End Class


Còn nhiều tính năng thú vị của bộ NAudio này, các bạn có thể tham khảo Document, hướng dẫn code của nó cũng như Source (C#) tại đây: http://naudio.codeplex.com/documentation
Nếu các bạn muốn có code Demo bên C# hoặc có gì thắc mắc thì yêu cầu tại đây, mình sẽ cố gắng giúp đỡ cho các bạn. Do là cũng mới nhìn thấy nó nên chưa thử vào sâu nên cũng chưa rành về nó lắm.
Tập tin đính kèm
NAudio-Release.rar
(215.77 KiB) Đã tải 477 lần


Cause you're my special thing
I'm flying without wings

01676167394
Thành viên tích cực
Thành viên tích cực
Bài viết: 128
Ngày tham gia: T.Bảy 18/06/2011 8:45 am
Has thanked: 2 time
Been thanked: 13 time

Re: NAudio - Thao tác với âm thanh

Gửi bàigửi bởi 01676167394 » T.Tư 21/11/2012 9:19 am

DLL này không dùng được trong vb6 :( , bạn có thể nói cụ thể về api không?

Uzumaki Naruto
Thành viên danh dự
Thành viên danh dự
Bài viết: 839
Ngày tham gia: T.Hai 30/04/2007 9:55 pm
Đến từ: Sài Gòn
Has thanked: 7 time
Been thanked: 83 time

Re: NAudio - Thao tác với âm thanh

Gửi bàigửi bởi Uzumaki Naruto » T.Tư 21/11/2012 11:47 pm

Việc thao tác với âm thanh dùng API là khá phức tạp, đây là ví dụ thao tác WAV thông qua API ở đây: http://caulacbovb.com/forum/viewtopic.php?f=8&t=25017
Tuy là mình code bằng .NET nhưng cũng không khác với VB6 là mấy.
Nếu là VB6 thì mình khuyến khích nên sử dụng Control Windows Media Player để thao tác cũng như lấy thông tin của file âm thanh.
Cause you're my special thing
I'm flying without wings

01676167394
Thành viên tích cực
Thành viên tích cực
Bài viết: 128
Ngày tham gia: T.Bảy 18/06/2011 8:45 am
Has thanked: 2 time
Been thanked: 13 time

Re: NAudio - Thao tác với âm thanh

Gửi bàigửi bởi 01676167394 » T.Năm 22/11/2012 8:15 am

Hàm API đó không sử dụng trên vb6 đc cậu àh :( , Mình Search google mà chỉ thấy bảo là không dùng đc nên chẳng biết thế nào cả :-/ .

Uzumaki Naruto
Thành viên danh dự
Thành viên danh dự
Bài viết: 839
Ngày tham gia: T.Hai 30/04/2007 9:55 pm
Đến từ: Sài Gòn
Has thanked: 7 time
Been thanked: 83 time

Re: NAudio - Thao tác với âm thanh

Gửi bàigửi bởi Uzumaki Naruto » T.Năm 22/11/2012 2:04 pm

hàm API nào vậy bạn?
Cause you're my special thing
I'm flying without wings

01676167394
Thành viên tích cực
Thành viên tích cực
Bài viết: 128
Ngày tham gia: T.Bảy 18/06/2011 8:45 am
Has thanked: 2 time
Been thanked: 13 time

Re: NAudio - Thao tác với âm thanh

Gửi bàigửi bởi 01676167394 » T.Năm 22/11/2012 2:46 pm

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)

Mình chưa từng học vb.net nên cũng không chắc, tớ search: API DllImport thì có kết quả vb6 không dùng đc trên vb6 còn đâu tất cả là của c# và vb.net :( . Cậu có thể post api vb6 cho mình đc không?

Uzumaki Naruto
Thành viên danh dự
Thành viên danh dự
Bài viết: 839
Ngày tham gia: T.Hai 30/04/2007 9:55 pm
Đến từ: Sài Gòn
Has thanked: 7 time
Been thanked: 83 time

Re: NAudio - Thao tác với âm thanh

Gửi bàigửi bởi Uzumaki Naruto » T.Năm 22/11/2012 5:29 pm

Đây là 1 cách khai báo API mới của .NET thôi chứ DllImport nó không phải là cái Win32 API. Cái quan trọng là tên hàm API ấy. Bạn từ cái tên rồi tra ra các khai báo bên VB6, còn phần sử dụng thì y như nhau.
Cause you're my special thing
I'm flying without wings

01676167394
Thành viên tích cực
Thành viên tích cực
Bài viết: 128
Ngày tham gia: T.Bảy 18/06/2011 8:45 am
Has thanked: 2 time
Been thanked: 13 time

Re: NAudio - Thao tác với âm thanh

Gửi bàigửi bởi 01676167394 » T.Sáu 23/11/2012 8:47 am

Private Declare Sub SetLastError Lib "kernel32.dll" (ByVal dwErrCode As Long)

Đây là api cậu nói đúng không? Sao lại là của thư viện kernel chứ? không phải user32 như vb.net? :-/

01676167394
Thành viên tích cực
Thành viên tích cực
Bài viết: 128
Ngày tham gia: T.Bảy 18/06/2011 8:45 am
Has thanked: 2 time
Been thanked: 13 time

Re: NAudio - Thao tác với âm thanh

Gửi bàigửi bởi 01676167394 » CN 25/11/2012 12:26 pm

Sao không trả lời mình vậy? :(

Hình đại diện của người dùng
PAPYRON
Thành viên tích cực
Thành viên tích cực
Bài viết: 161
Ngày tham gia: T.Tư 23/11/2011 8:58 am
Đến từ: Lớp 9/4 THCS Lê Quý Đôn, Long Khánh, Đồng Nai.
Has thanked: 2 time
Been thanked: 38 time
Liên hệ:

Re: NAudio - Thao tác với âm thanh

Gửi bàigửi bởi PAPYRON » T.Ba 18/12/2012 4:35 pm



Quay về “[.NET] Module, Class, UserControl, DLL”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách