| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import {getRequiredElement} from 'chrome://resources/js/util.js'; |
| |
| import {AudioBroker} from './audio_broker.js'; |
| import {AudioPlayer} from './audio_player.js'; |
| import {Page} from './page.js'; |
| |
| |
| |
| export interface AudioSample { |
| sampleRate: number; |
| freqency: number; |
| channelCount: 1|2; |
| pan: number; |
| description: string; |
| } |
| |
| const audiosSamples: AudioSample[] = [ |
| { |
| sampleRate: 44100, |
| freqency: 440, |
| channelCount: 1, |
| pan: 0, |
| description: '44.1k mono 440Hz sine tone', |
| }, |
| { |
| sampleRate: 48000, |
| freqency: 440, |
| channelCount: 1, |
| pan: 0, |
| description: '48k mono 440Hz sine tone', |
| }, |
| { |
| sampleRate: 48000, |
| freqency: 440, |
| channelCount: 2, |
| pan: 0, |
| description: '48k stereo 440Hz sine tone', |
| }, |
| { |
| sampleRate: 48000, |
| freqency: 440, |
| channelCount: 2, |
| pan: -1, |
| description: '48k stereo 440Hz sine tone - Left channel only', |
| }, |
| { |
| sampleRate: 48000, |
| freqency: 440, |
| channelCount: 2, |
| pan: 1, |
| description: '48k stereo 440Hz sine tone - Right channel only', |
| }, |
| ]; |
| |
| export class OutputPage extends Page { |
| testOutputFeedback: Map<string, null|boolean>; |
| constructor() { |
| super('output'); |
| this.testOutputFeedback = new Map(); |
| this.initOutputMap(); |
| this.createAudioPlayer(); |
| } |
| |
| initOutputMap() { |
| for (const audio of audiosSamples) { |
| this.testOutputFeedback.set(audio.description, null); |
| } |
| } |
| |
| updateActiveOutputDevice() { |
| const handler = AudioBroker.getInstance().handler; |
| handler.getActiveOutputDeviceName().then(({deviceName}) => { |
| if (deviceName) { |
| getRequiredElement('active-output').innerHTML = deviceName; |
| } else { |
| getRequiredElement('active-output').innerHTML = |
| 'No active output device'; |
| } |
| }); |
| } |
| |
| setOutputMapEntry(audioSample: AudioSample, canHear: boolean) { |
| this.testOutputFeedback.set(audioSample.description, canHear); |
| } |
| |
| createAudioPlayer() { |
| const audioPlayer = new AudioPlayer(audiosSamples); |
| getRequiredElement('audio-player').appendChild(audioPlayer); |
| } |
| |
| static getInstance() { |
| if (instance === null) { |
| instance = new OutputPage(); |
| } |
| return instance; |
| } |
| } |
| |
| let instance: OutputPage|null = null; |