Cách hiển thị bản ghi thời gian bên cạnh âm thanh đã phát
Bản ghi âm là phiên bản văn bản của bài phát biểu, hữu ích trong việc cung cấp các tài liệu hữu ích như các bài giảng được ghi lại, hội thảo, vv cho những người bị thách thức rõ ràng. Chúng cũng được sử dụng để lưu giữ hồ sơ văn bản về các sự kiện như phỏng vấn, phiên tòa và các cuộc họp.
Âm thanh lời nói trong các trang web (như trong podcast) thường đi kèm với bảng điểm, vì lợi ích của những người khiếm thính hoặc không thể nghe được. Họ có thể xem văn bản "phát" cùng với âm thanh. Cách tốt nhất để tạo bản ghi âm là bằng cách giải thích và ghi âm thủ công.
Trong bài viết này, chúng ta sẽ thấy Làm thế nào để hiển thị bản ghi âm đang chạy cùng với âm thanh. Để bắt đầu, chúng ta cần chuẩn bị sẵn sàng. Đối với bài đăng này, tôi đã tải xuống một âm thanh mẫu và bản ghi của nó từ voxtab.
Tôi sử dụng HTML ul
danh sách để hiển thị các hộp thoại trên một trang web như dưới đây:
- Justin: Điều tôi đang cố gắng nói là kháng cáo và giải quyết là riêng biệt.
- Alistair: Bạn có nghĩa là thông tin liên lạc và thông báo nội bộ và bên ngoài sẽ được đưa vào quy trình kháng cáo.
- Justin: Phải, vì họ kết nối với kháng cáo.
Giáo dục
Tiếp theo, tôi muốn tất cả các văn bản có sẵn sẽ được làm mờ và để chỉ bỏ qua đoạn hội thoại phù hợp với bài phát biểu hiện tại đang được ghi bởi bản ghi âm. Vì vậy, để làm mờ các hộp thoại, tôi sử dụng bộ lọc CSS "làm mờ".
#transcript> li -webkit-filter: Blur (3px) bộ lọc: Blur (3px); quá trình chuyển đổi: tất cả .8 giây dễ dàng;
Đối với IE 10+ bạn có thể thêm bóng văn bản
để tạo hiệu ứng mờ. Bạn có thể sử dụng mã này để phát hiện xem CSS có được áp dụng hay không và để tải biểu định kiểu cụ thể IE của bạn. Khi văn bản bị mờ, tôi tiếp tục và thêm một số kiểu vào bảng điểm.
if (getComputingStyle (hộp thoại [0]). webkitFilter === không xác định && getComputingStyle (hộp thoại [0]) ('liên kết'); linkEle.type = 'văn bản / css'; linkEle.rel = 'bản định kiểu'; linkEle.href = 'eg.css'; headEle.appendChild (linkEle);
Bây giờ, hãy thêm âm thanh vào trang, với điều này.
Các ontimeupdate
sự kiện của âm thanh
yếu tố được bắn mỗi khi nó thời điểm hiện tại
được cập nhật, vì vậy chúng tôi sẽ sử dụng sự kiện đó để kiểm tra thời gian chạy hiện tại của âm thanh và đánh dấu đoạn hội thoại tương ứng trong bản phiên âm. Trước tiên chúng ta hãy tạo một số biến toàn cầu mà chúng ta sẽ cần.
đối thoạiTimings = [0,4,9,11,18,24,29,31,44,45,47]; hộp thoại = document.querySelector ALL ('# transcript> li'); transcriptWrapper = document.querySelector ('# transcriptWrapper'); audio = document.querySelector ('# audio'); trướcDialogueTime = -1;
đối thoại
là một dãy số đại diện cho giây khi mỗi đoạn hội thoại trong bảng điểm bắt đầu. Cuộc hội thoại đầu tiên bắt đầu lúc 0, lần thứ hai lúc 4 giờ, v.v.. trướcDialogueTime
sẽ được sử dụng để theo dõi các thay đổi đối thoại.
Cuối cùng chúng ta hãy chuyển đến chức năng được nối với ontimeupdate
, được đặt tên là "playTranscript". Kể từ khi playTranscript
được phát ra gần như mỗi giây âm thanh đang phát, trước tiên chúng ta cần xác định đoạn hội thoại nào đang được phát. Giả sử âm thanh phát ra lúc 0 giờ 14 phút, sau đó nó phát đoạn hội thoại bắt đầu lúc 0 giờ 11 phút (tham khảo đối thoại
mảng), nếu thời gian hiện tại là 0:30 trong âm thanh thì đó là cuộc hội thoại bắt đầu lúc 0h29.
Do đó, để tìm hiểu khi nào cuộc đối thoại hiện tại bắt đầu, trước tiên chúng tôi lọc tất cả các lần trong đối thoại
mảng dưới thời gian hiện tại của âm thanh. Nếu thời gian hiện tại là 0h14, chúng tôi sẽ lọc tất cả các số. trong mảng dưới 14 (là 0, 4, 9 và 11) và tìm ra số không tối đa. trong số đó, là 11 (do đó, cuộc đối thoại bắt đầu lúc 0h11).
hàm playTranscript () var currentDialogueTime = Math.max.apply (Math, ConversTimings.filter (function (v) return v <= audio.currentTime));
Một khi currentDialogueTime
được tính toán, chúng tôi kiểm tra xem nó có giống như trướcDialogueTime
(đó là nếu đoạn hội thoại trong âm thanh có thay đổi hay không), nếu đó không phải là đối sánh (đó là nếu đoạn hội thoại đã thay đổi), thì currentDialogueTime
được giao cho trướcDialogueTime
.
hàm playTranscript () var currentDialogueTime = Math.max.apply (Math, ConversTimings.filter (function (v) return v <= audio.currentTime)); if(previousDialogueTime !== currentDialogueTime) previousDialogueTime = currentDialogueTime;
Bây giờ hãy sử dụng chỉ mục của currentDialogueTime
bên trong đối thoại
mảng để tìm ra đoạn hội thoại nào trong danh sách các đoạn hội thoại cần được tô sáng. Ví dụ: nếu currentDialogueTime
là 11, sau đó chỉ số 11 trong đối thoại
mảng là 3 có nghĩa là chúng ta phải làm nổi bật đoạn hội thoại ở chỉ số 3 trong đối thoại
mảng.
hàm playTranscript () var currentDialogueTime = Math.max.apply (Math, ConversTimings.filter (function (v) return v <= audio.currentTime)); if(previousDialogueTime !== currentDialogueTime) previousDialogueTime = currentDialogueTime; var currentDialogue = dialogues[dialogueTimings.indexOf(currentDialogueTime)];
Khi chúng tôi đã tìm thấy đoạn hội thoại để làm nổi bật (đó là currentDialogue
), chúng tôi cuộn bảng điểm
(nếu có thể cuộn) cho đến currentDialogue
thấp hơn 50px so với đỉnh của trình bao bọc, sau đó chúng tôi tìm ra đoạn hội thoại được tô sáng trước đó và xóa lớp nói
từ nó và thêm nó vào currentDialogue
.
hàm playTranscript () var currentDialogueTime = Math.max.apply (Math, ConversTimings.filter (function (v) return v <= audio.currentTime)); if(previousDialogueTime !== currentDialogueTime) previousDialogueTime = currentDialogueTime; var currentDialogue = dialogues[dialogueTimings.indexOf(currentDialogueTime)]; transcriptWrapper.scrollTop = currentDialogue.offsetTop - 50; var previousDialogue = document.getElementsByClassName('speaking')[0]; if(previousDialogue !== undefined) previousDialogue.className = previousDialogue.className.replace('speaking',"); currentDialogue.className +=' speaking';
Phần tử với lớp nói
sẽ hiển thị văn bản không bị mờ.
.nói -webkit-filter: Blur (0px) filter: Blur (0px);
Và đó là, đây là mã HTML và mã đầy đủ.
- Justin: Điều tôi đang cố gắng nói là kháng cáo và giải quyết là riêng biệt.
- Alistair: Bạn có nghĩa là thông tin liên lạc và thông báo nội bộ và bên ngoài sẽ được đưa vào quy trình kháng cáo.
- Justin: Phải, vì họ kết nối với kháng cáo.
Giáo dục
Bản giới thiệu
Hãy xem bản demo bên dưới để có ý tưởng về cách thức hoạt động của nó khi tất cả các mã được đặt cùng nhau.