Gần đây tôi đã chơi với ruby và tôi đã quyết định bắt đầu một dự án đơn giản để viết một tập lệnh ruby ghi lại âm thanh vào một tệp .wav
. Tôi phát hiện ra rằng ruby không cung cấp khả năng truy cập rất tốt vào các thiết bị phần cứng (và có lẽ nó không nên), nhưng PortAudio đó làm, và tôi phát hiện ra một wrapper tuyệt vời cho PA here (nó không phải là đá quý, tôi nghĩ bởi vì nó sử dụng ruby ffi
để đính kèm vào PortAudio và thư viện PA có thể ở nhiều nơi). Tôi đã lúng túng thông qua tài liệu và ví dụ của PortAudio để tìm ra cách PA hoạt động. Tôi đã không viết hoặc đọc C
trong nhiều năm.Sử dụng trình bao bọc PortAudio bằng ruby để ghi âm .wav
Tôi đang gặp khó khăn với thông số nào tôi nên chuyển đến luồng trong khi tạo và bộ đệm trong khi tạo. Ví dụ: chính xác số frame
là gì và nó có liên quan như thế nào với các thông số khác như channel
và sample rate
. Tôi hoàn toàn mới để lập trình âm thanh nói chung là tốt, vì vậy nếu bất cứ ai có thể chỉ cho tôi một số hướng dẫn chung, vv, về âm thanh cấp thiết bị, tôi sẽ đánh giá cao nó.
ruby-portaudio
cung cấp một ví dụ đơn lẻ tạo luồng và bộ đệm, viết wave sin vào bộ đệm, sau đó gửi bộ đệm đến luồng được phát. Một số ruby tôi gặp rắc rối trong ví dụ, đặc biệt là khối vòng lặp.
PortAudio.init
block_size = 1024
sr = 44100
step = 1.0/sr
time = 0.0
stream = PortAudio::Stream.open(
:sample_rate => sr,
:frames => block_size,
:output => {
:device => PortAudio::Device.default_output,
:channels => 1,
:sample_format => :float32
})
buffer = PortAudio::SampleBuffer.new(
:format => :float32,
:channels => 1,
:frames => block_size)
playing = true
Signal.trap('INT') { playing = false }
puts "Ctrl-C to exit"
stream.start
loop do
stream << buffer.fill { |frame, channel|
time += step
Math.cos(time * 2 * Math::PI * 440.0) * Math.cos(time * 2 * Math::PI)
}
break unless playing
end
stream.stop
Nếu tôi định ghi, tôi nên đọc luồng vào bộ đệm, sau đó thao tác bộ đệm đó và ghi vào tệp, phải không?
Ngoài ra, nếu tôi sủa cây sai ở đây và có cách dễ dàng hơn để thực hiện việc này (trong ruby), một số hướng sẽ tốt đẹp.
Dường như là một câu hỏi liên quan (không bị lừa đảo) ở đây http: // stackoverflow.com/questions/2716987/recording-audio-through-rtmp-rails –