2010-05-08 44 views
37

Tôi đang khởi động thiết kế hệ thống âm thanh khách/chủ có thể truyền âm thanh tùy ý qua mạng. Một máy chủ trung tâm bơm ra một luồng âm thanh và x số lượng khách hàng nhận được dữ liệu âm thanh và phát nó. Cho đến nay không có ma thuật cần thiết và tôi thậm chí đã có kịch bản này để làm việc với VLC media player ra khỏi hộp. Tuy nhiên, phần phức tạp dường như đang đồng bộ hóa phát lại âm thanh sao cho tất cả khách hàng đang ở chế độ đồng bộ hóa âm thanh (độ trễ thực tế có thể được cho phép miễn là nó được đồng bộ hóa bởi người nghe).đồng bộ hóa âm thanh qua mạng

Câu hỏi của tôi là nếu có bất kỳ phương pháp hay thuật toán nào được sử dụng cho loại sự cố đồng bộ hóa này (video có thể được giải quyết theo cách tương tự). Suy nghĩ ban đầu của riêng tôi tập trung xung quanh đồng bộ hóa đồng hồ giữa các máy vật lý và do đó tạo ra một "bộ đếm thời gian chính" ảo và bằng cách nào đó sắp xếp các gói dữ liệu âm thanh chống lại nó.

Một số sản phẩm đã giải quyết vấn đề (tuy nhiên vẫn không đủ để sử dụng hợp tổng thể của tôi):

http://www.sonos.com

http://netchorus.com/

Bất kỳ con trỏ được hoan nghênh nhất. Cảm ơn.

PS: This related question dường như đã chết từ lâu.

+0

đồng bộ hóa với nội dung gì? Bạn có nghĩa là dejittering hoặc đồng bộ hóa các kênh khác nhau hoặc đồng bộ hóa với video hoặc ...? – KillianDS

+8

@KillianDS: đồng bộ để hai khách hàng phát cùng một âm thanh giống như họ là hai loa được kết nối với cùng một hệ thống âm thanh. – sharkin

+0

hey Bạn có biết cách sử dụng p4sync trong Android không? – Kaushal28

Trả lời

28

Ryan Barrett đã viết những phát hiện của mình trên his blog.

Giải pháp của ông liên quan đến sử dụng NTP như một phương pháp để giữ tất cả các đồng hồ trong động đồng bộ hóa:

Nghiêm túc, tuy nhiên, chỉ có một trick để p4sync, và đó là cách nó sử dụng NTP. Một máy chủ hoạt động như máy chủ p4sync . Các máy khách p4sync khác đồng bộ đồng hồ hệ thống của chúng với đồng hồ của máy chủ , sử dụng SNTP. Khi máy chủ bắt đầu phát một bài hát, nó ghi lại thời gian, tính bằng mili giây. Sau đó, khách hàng sẽ truy xuất dấu thời gian , tính chênh lệch giữa thời gian hiện tại từ đó dấu thời gian và tìm kiếm bài hát đó .

+2

+2 nếu tôi có thể, loại tài liệu này là chính xác những gì tôi đang sau, cảm ơn! – sharkin

+0

cách thêm thư viện được đề cập này trong android? – Kaushal28

0

"... miễn là nó được cho là được đồng bộ bởi một người nghe" - Rất khó làm vì tai ít được tha thứ hơn mắt. Đặc biệt là nếu bạn muốn thực hiện điều này qua mạng không dây.

Tôi sẽ thử nghiệm trước tiên bằng công nghệ dựa trên web, trình phát âm thanh flash được điều khiển từ xa bởi máy chủ qua Javascript.

Nếu điều đó cho kết quả kém thì tôi sẽ cố gắng kiểm soát nhiều hơn bằng cách sử dụng một cái gì đó như python (với pygame).

Nếu tiến trình đã được thực hiện, tôi cũng sẽ thử sử dụng ChucK và thử một số chương trình cấp thấp với thư viện âm thanh ALSA.

Nếu không có gì thỏa đáng, tôi sẽ đến và xem lại bài đăng này và thực sự đọc một điều gì đó hợp lý bởi chuyên gia lập trình âm thanh chuyên môn và, nếu sinh kế của tôi phụ thuộc vào nó, có thể sẽ kết thúc 14 bảng Anh cho ứng dụng NetChorus thương mại hoặc một cái gì đó tương tự.

+0

Cảm ơn bạn đã trả lời.Như đã đề cập, có vẻ như các sản phẩm hiện có giải quyết được vấn đề đạt yêu cầu, tuy nhiên chúng lại thiếu các phần khác trong trường hợp sử dụng cụ thể của tôi. – sharkin

+0

Tôi tò mò, bạn đang lên kế hoạch gì? – zaf

9

Khó khăn, nhưng có thể.

Sử dụng NTP hoặc tictoc để giúp bạn có được đồng hồ được đồng bộ hóa với tốc độ đã biết về nguồn thời gian của hệ thống.

Đồng thời giữ bộ ước lượng chạy theo tốc độ của đồng hồ âm thanh; cách thông thường để thực hiện việc này là ghi lại cùng thiết bị âm thanh đang phát, ghi trên bộ đệm được cài đặt sẵn với số ma thuật và xem thẻ âm thanh đến đâu trong thời gian đo bằng đồng hồ được đồng bộ hóa (hoặc ngược lại, xem phải mất bao lâu để thực hiện một số mẫu đã biết trên đồng hồ được đồng bộ hóa). Bạn cần phải tiếp tục làm điều này, đồng hồ sẽ trôi dạt liên quan đến thời gian mạng.

Vì vậy, bây giờ bạn biết chính xác số lượng mẫu mỗi giây bằng đồng hồ của card âm thanh của bạn, bạn cần phải xuất ra để phù hợp với tốc độ của đồng hồ được đồng bộ hóa. Vì vậy, bạn sau đó nội suy các mẫu nhận được từ mạng ở tốc độ đó, cộng hoặc trừ một hiệu chỉnh nếu bạn cần bắt kịp hoặc lùi lại một chút từ nơi bạn đã đến trên bộ đệm cuối cùng. Bạn sẽ cần phải hết sức cẩn thận khi thực hiện phép nội suy này theo cách mà nó không đưa vào các tạo phẩm âm thanh; có mã ví dụ here cho các thuật toán bạn sẽ cần, nhưng sẽ có khá nhiều đọc trước khi bạn bắt kịp tốc độ đó.

Nếu nguồn của bạn là bản ghi trực tiếp, tất nhiên, bạn sẽ phải đo tốc độ mẫu của soundcard đó và nội suy thành các mẫu thời gian mạng trước khi gửi.

9

Kiểm tra giấy An Internet Protocol Sound System bởi Tom Blank của Microsoft Research. Ông giải quyết vấn đề chính xác mà bạn đang làm việc. Giải pháp của ông liên quan đến việc đồng bộ hóa các đồng hồ trên các máy và sử dụng các dấu thời gian để cho phép chúng hoạt động cùng một lúc. Nhược điểm của phương pháp này là độ trễ. Để đồng bộ hóa tất cả các đồng hồ yêu cầu phải dán thời gian ở độ trễ lớn nhất trên mạng.

6

Tùy thuộc vào kích thước và hình dạng của địa điểm, nhận được tất cả mọi thứ để được đồng bộ là phần dễ dàng, nhận được tất cả mọi thứ để âm thanh đúng là một hình thức nghệ thuật của riêng mình, nếu có thể ở tất cả. Từ khía cạnh kỹ thuật, phần khó nhất là tìm ra độ trễ từ dòng thời gian được đồng bộ hóa của bạn với đầu ra âm thanh thực tế. Có phần cứng giống hệt nhau và khung phần mềm độ trễ thấp (ASIO, JACK) chắc chắn sẽ giúp ở đây, cũng như hiệu chuẩn. Hoặc là trước thời hạn hoặc hoạt động. Nếu không, nó chỉ đồng bộ hóa dòng thời gian với NTP và sử dụng phản hồi vòng kín cho âm thanh để đồng bộ hóa đầu ra với tiến trình đã đồng ý.

Vấn đề lớn hơn là âm thanh cần một khoảng thời gian đáng kể để phổ biến. 10 m sự khác biệt về khoảng cách đã là 30ms chậm trễ - đủ để vít lên bản địa hóa âm thanh. Nhân đôi điều đó và bạn vào lãnh thổ tiếng vọng khó chịu. Thiết lập âm thanh chuyên nghiệp thực sự có mục đích giới thiệu sự chậm trễ, sử dụng số lượng loa cao hơn và phát lại với các âm vang để tránh một tiếng kêu của những người nghe nhạc.

+0

Nếu bạn quản lý để có được các máy tính khác nhau để liên tục đồng bộ hóa, sau đó giới thiệu độ trễ đó (và do đó sự chậm trễ của loa kèm theo) sẽ không đáng kể. – puk

+0

Giới thiệu độ trễ thực sự là tầm thường, tìm ra sự chậm trễ nào là khó nếu vị trí nghe không phải là điểm cố định. –

+0

Có, tôi đồng ý, nếu đó là điểm cố định, bạn chỉ có thể kiểm tra các giá trị khác nhau. Nhưng nếu đó là một người di chuyển, hoặc nhiều người, có lẽ tốt nhất là không nên thử – puk

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