在 Angular 4 中播放声音

Posted

技术标签:

【中文标题】在 Angular 4 中播放声音【英文标题】:Play sound in Angular 4 【发布时间】:2017-12-06 14:24:23 【问题描述】:

我正在使用 Angular 4 开发 Electron app。我想在某些特定动作上播放声音。是否有任何模块或代码?它可以在角度 4 中,或者如果电子为此提供一些服务,它也应该可以工作

因为我想在某些动作上播放它,所以我不能使用 html 音频标签和 javascript 的 audio()

我只想播放 2-3 秒的声音,所以不需要其他功能。

它可以是电子或 Angular 4,它们中的任何一个都可以工作......

【问题讨论】:

scotch.io/tutorials/… 【参考方案1】:

刚刚在一个正在工作的项目中做了这个(角度 4)并且它工作了

playAudio()
  let audio = new Audio();
  audio.src = "../../../assets/audio/alarm.wav";
  audio.load();
  audio.play();

this.playAudio();

确保路径正确并引用现有音频

【讨论】:

我收到错误 - 在当前上下文中,用户代理或平台不允许他的播放方法,可能是因为用户拒绝了权限。 抱歉,Firefox 设置问题。必须启用【参考方案2】:

根据 Robin 的评论,我已经检查了该链接,我们可以使用 ts 文件中的 audio() 对象来使用它,如下所示:

this.audio = new Audio();
this.audio.src = "../../../assets/sounds/button_1.mp3";
this.audio.load();
this.audio.play();

【讨论】:

这个方法如何改变音量? @carte // 将音量设置为 50% this.audio.volume = 0.5; this.audio.load(); this.audio.play();【参考方案3】:

更新: 我遇到了同样的问题,并使用 ViewChild 引用和 ElementRef 来解决这个问题。

app.component.ts

@ViewChild('audioOption') audioPlayerRef: ElementRef;

onAudioPlay()
  this.audioPlayerRef.nativeElement.play();

app.component.html

   <audio #audioOption>
       <source src='../*.mp3' type="audio/mp3">
   </audio>

【讨论】:

从角度来看,这是唯一对我有用的解决方案 有没有办法动态地做到这一点?我的意思是用变量替换 src 角度方式,您可以执行 [src]='"path_to_to_your_audio"' 或 src='path_to_your_audio 然后在您的组件中动态分配 path_to_to_your_audio【参考方案4】:

您可以尝试使用howler.js 您可以使用npm install --save howler 将其安装到您的项目中并播放如下声音:

var sound = new Howl(
  src: ['sound.mp3']
);

sound.play();

【讨论】:

Howler 也在移动浏览器上处理音频,因为这需要通过用户交互“解锁”。解决了我的问题! 它不工作!我收到这条消息:howler.js:2432 AudioContext 不允许启动。它必须在页面上的用户手势之后恢复(或创建)。 developers.google.com/web/updates/2017/09/…【参考方案5】:

步骤 1 npm install --save howler

步骤 2 从组件中的 howler 导入 Howl

step3 : 在功能块内添加以下代码

         let sound = new Howl(
          src: ['sound.mp3']
            );

         sound.play()

【讨论】:

【参考方案6】:
playSound(sound) 
    sound = "../assets/sounds/" + sound + ".mp3";
    sound && ( new Audio(sound) ).play()
  

如果您需要此方法可重用,sound 是文件名。

【讨论】:

【参考方案7】:

Asmon 的代码不错,但我认为真正的问题是谷歌浏览器的政策更新了,在这个页面https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#webaudio 你可以找到答案 总而言之,重点应该是这个。

Chrome 的自动播放策略很简单:

始终允许静音自动播放。 在以下情况下允许自动播放声音: 用户与域进行了交互(点击、点击等)。 在桌面上,用户的媒体参与指数阈值已被超过,这意味着用户之前播放过有声视频。 在移动设备上,用户已[将网站添加到他们的主屏幕]。 ***框架可以将自动播放权限委托给其 iframe 以允许自动播放声音。

【讨论】:

我找到了这个可能的解决方案,并且可以毫无问题地为我工作***.com/questions/50490304/…【参考方案8】:

Angular 13:

创建服务:

import  Injectable  from '@angular/core';

@Injectable(
  providedIn: 'root'
)
export class Audioservice 

  constructor()  

  playAudio(): void 
    const audio = new Audio();
    audio.src = '../../../assets/audio/alert.wav';
    audio.load();
    audio.play();
  

然后在你的组件中:

[...]

import  AudioService  from '../services/audio.service';
[...]

  constructor(
    private audioService: AudioService
  )
    playAudio();


[...]

  playAudio():void 
        this.audioService.playAudio();

【讨论】:

以上是关于在 Angular 4 中播放声音的主要内容,如果未能解决你的问题,请参考以下文章

使用 Pyo 在 Python 中播放声音

phonegap 媒体声音在 5 次后停止播放

在 Ionic4 中加载页面时播放声音

如果条件在 XNA 中播放声音,不播放声音?

我的电脑在网页中播放视频只有声音没有画面是怎么回事?

在 J2ME 中未播放通知声音