2011-01-27 32 views
5

Tôi đang phát âm thanh bằng NetConnection và NetStream. Tôi biết rằng bạn có thể sửa đổi dữ liệu mẫu trong thời gian thực với đối tượng Sound, tuy nhiên tôi không thể tìm thấy SampleDataEvent để phát âm thanh với đối tượng NetStream. Có cách nào để truyền âm thanh từ đối tượng NetStream sang đối tượng Sound và thay đổi âm thanh tại đối tượng đó thay thế không?Sửa đổi âm thanh trong thời gian thực với SampleDataEvent cho âm thanh trong NetStream

Chỉnh sửa: Tôi sẵn sàng thực hiện bất kỳ loại hack điên nào, vì vậy mọi giải pháp đều OK!

+0

dữ liệu âm thanh nằm ở phía máy chủ như thế nào, bạn có thể hiển thị url mẫu không? Bạn có một url mới cho mỗi bản nhạc mới hay nó luôn giống nhau? máy chủ có cho phép tải xuống nhanh hơn nhiều so với tốc độ phát lại và có thể tải tệp hoàn chỉnh không? – www0z0k

+0

tôi nghĩ rằng tôi biết cách, chỉ cần thêm thông tin – www0z0k

+0

Dữ liệu được truyền qua RTMP chuẩn và chỉ MP3. URL mẫu sẽ giống như http: // host: 1935/mp3playback/mp3: hello.mp3. Có một URL mới cho mỗi bản nhạc. Đó là, tất nhiên, có thể làm tiến bộ tải về thông qua các Sound() đối tượng để đạt được những gì tôi muốn, nhưng tôi muốn làm điều đó bằng cách sử dụng NetStream(). – Johan

Trả lời

2

bạn cần truy cập vào bytecode của âm thanh, nếu sử dụng NetStream nó có thể chỉ bằng cách đi qua nó để (yêu cầu nó bằng) NetStream.send()/NetConnection.call()ngoài để các dữ liệu được xem trực tiếp. nếu không, bạn sẽ cần một cái gì đó giống như url trực tiếp cho một số điện thoại Sound hoặc URLStream

2

Tùy thuộc vào chất lượng bạn đang tìm kiếm, bạn có thể hy sinh nó xuống tín hiệu đơn âm với tốc độ bit thấp, bạn có thể phát trực tuyến nó để lấy nó như là một URLStream ở phía máy khách, và sau đó nạp dữ liệu của URLStream đó vào một SampleDataEvent của một đối tượng Sound trống, dần dần trong thời gian chạy.

Công việc phụ chủ yếu sẽ ở phía máy chủ, giải nén MP3 của bạn thành luồng dạng sóng nổi (một luồng tín hiệu đơn kênh hoặc hỗn hợp của hai kết hợp với mono) và sau đó đẩy điều đó ra ứng dụng phía khách hàng của bạn.

Khi URLStream được tải, hãy thêm byte đã tải xuống vào ByteArray có sẵn trên SampleDataEvent của Sound (cũng cung cấp cho nó một số bộ đệm "thời gian" để tải đủ dữ liệu dạng sóng). Đối với mỗi mẫu đơn đọc từ URLStream, bạn nên viết cùng một giá trị hai lần cho đối tượng SampleDataEvent.data (một lần đến kênh Trái, một lần sang phải).

Tất cả điều này được nói, việc hạ cấp luồng âm thanh giống như WAV xuống mono có thể không đủ để giảm băng thông và tiếp cận đối tượng mục tiêu rộng. Có lẽ một cái nhìn tại một thư viện OGG cho AS3 (mà nên tồn tại) sẽ là một lựa chọn tốt hơn, và chắc chắn nên hỗ trợ giải mã một phần tải xuống suối.

Các vấn đề liên quan