2015-05-04 15 views
16

Im đang cố ghi lại bản ghi 48000Hz qua getUserMedia. Nhưng không may mắn. MediaStream trả về âm thanh 44100Hz. Làm thế nào tôi có thể thiết lập này để 48000Hz?Thay đổi tốc độ lấy mẫu của AudioContext (getUserMedia)

Dưới đây là đoạn mã của tôi:

var startUsermedia = this.startUsermedia; 

      navigator.getUserMedia({ 
       audio: true, 
       //sampleRate: 48000 
      }, startUsermedia, function (e) { 
       console.log('No live audio input: ' + e); 
      }); 

Các startUsermedia chức năng:

startUsermedia: function (stream) { 
      var input = audio_context.createMediaStreamSource(stream); 
      console.log('Media stream created.'); 
      // Uncomment if you want the audio to feedback directly 
      //input.connect(audio_context.destination); 
      //__log('Input connected to audio context destination.'); 

      recorder = new Recorder(input); 
      console.log('Recorder initialised.'); 
     }, 

Tôi đã cố gắng thay đổi sampleRate tài sản của AudioContext, nhưng không có may mắn.

Làm cách nào tôi có thể thay đổi mẫuRate thành 48000Hz?

EDIT: Chúng tôi cũng là tại sao với một giải pháp flash có thể ghi lại và wav xuất khẩu tại 48000Hz

Trả lời

2

Bạn không thể. Tốc độ mẫu của AudioContext được thiết lập bởi trình duyệt/thiết bị và bạn không thể làm gì để thay đổi nó. Trong thực tế, bạn sẽ thấy rằng 44.1kHz trên máy của bạn có thể là 48kHz trên máy của tôi. Nó thay đổi theo bất kỳ hệ điều hành nào được chọn theo mặc định.

Cũng nên nhớ rằng không phải tất cả phần cứng đều có khả năng tất cả các tỷ lệ mẫu.

+0

Tôi hiểu, cảm ơn bạn. Có thể có một giải pháp flash hỗ trợ 48kHz?(Nó không quan trọng nếu một số phần cứng không hỗ trợ nó) –

+0

@ f.lorenzo Có thể. Bạn nên đăng câu hỏi khác cho câu hỏi đó vì câu trả lời Flash hoàn toàn khác với API âm thanh trên web. – Brad

10

Theo như tôi biết, không có cách nào thay đổi tốc độ lấy mẫu trong ngữ cảnh âm thanh. Tốc độ lấy mẫu thường sẽ là tốc độ lấy mẫu của thiết bị ghi của bạn và sẽ vẫn như vậy. Vì vậy, bạn sẽ không thể để viết một cái gì đó như thế này:.

var input = audio_context.createMediaStreamSource(stream); 
var resampler = new Resampler(44100, 48000); 
input.connect(resampler); 
resampler.connect(audio_context.destination); 

Tuy nhiên, nếu bạn muốn lấy dòng âm thanh của bạn, Resample nó và sau đó gửi nó vào backend (hoặc làm sth khác với nó bên ngoài API âm thanh web), bạn có thể sử dụng trình chuyển đổi tỷ lệ mẫu bên ngoài (ví dụ: https://github.com/taisel/XAudioJS/blob/master/resampler.js).

var resampler = new Resampler(44100, 48000, 1, 2229); 

    function startUsermedia(stream) { 
     var input = audio_context.createMediaStreamSource(stream); 
     console.log('Media stream created.'); 


     recorder = audio_context.createScriptProcessor(2048); 
     recorder.onaudioprocess = recorderProcess; 
     recorder.connect(audio_context.destination); 
    } 

    function recorderProcess(e) { 
     var buffer = e.inputBuffer.getChannelData(0); 
     var resampled = resampler.resampler(buffer); 
     //--> do sth with the resampled data for instance send to server 
    } 
+0

Cảm ơn bạn nhưng thật đáng buồn là một phiên bản ghi lại đã được lấy mẫu lại sẽ không hoạt động. Nhưng đây là một câu trả lời hay cho những người khác đang tìm cách chuyển đổi sample mẫu số –

+0

Ok, sau đó chỉ tò mò: bạn muốn làm gì với luồng âm thanh của mình? Bạn có muốn lưu nó bằng cách nào đó hoặc mục tiêu của bạn là gì? – basilikum

+0

Đáng buồn là tôi không thể cho bạn biết mục đích của nó vì chính sách của công ty. Nhưng một sample mẫu chính xác là phải. –

2

Bạn có thể sử dụng OfflineAudioContext để cơ bản hiển thị bộ đệm âm thanh của bạn với tốc độ mẫu khác (nhưng đây là thao tác theo lô).

Vì vậy, bạn sẽ ghi lại bản ghi của mình bằng ngữ cảnh âm thanh bình thường và sau đó sử dụng OfflineAudioContext với tốc độ mẫu khác để hiển thị bộ đệm của bạn. Có một ví dụ trên trang Mozilla.

0

Hiện tại, thông số này đã có trong thông số kỹ thuật nhưng chưa được triển khai trong Chromium. Cũng trong bugs.chromium.org, "Trạng thái: Có sẵn" không có nghĩa là nó được triển khai. Nó chỉ có nghĩa là không ai làm việc trên nó và nó có sẵn cho bất cứ ai muốn làm việc trên nó. Vì vậy, "Có sẵn" có nghĩa là "Không được chỉ định".

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