以Qt播放通知(频率x)声音 - 最简单的方法?

时间:2014-01-23 14:01:41

标签: c++ audio qt5.1

Qt 5.1或更高版本:

我需要播放频率为x的通知声音n毫秒。如果我能组合这样的音调也很好:1000Hz持续2秒,然后3000Hz持续1秒,...

最简单的方法是使用文件(WAV,MP3,..),例如如下所述:How to play sound with Qt但是我必须为我的每个场景生成这样的文件。

Qt's audio output example在内存中生成此类音调(Generator::generateData(const QAudioFormat &format, qint64 durationUs, int sampleRate))。我可以为我的目的编写这样的发电机。但我必须这样做吗?

那么在x毫秒内播放频率x的最简单方法是什么?

2 个答案:

答案 0 :(得分:2)

你可以使用“window.h”包(不是QT包)。 然后你只需使用Beep(频率,毫秒)。 对于你的例子,它应该分别是Beep(1000,2000)和Beep(3000,1000)。

答案 1 :(得分:2)

要在Qt中生成音调,我们可以将自己的QBuffer传递给要播放的QAudioOutput。

查看QAudioOutput页面上的first example

我所做的是在QByteArray中创建我的波形。 请记住,<?php $name = strip_tags(trim($_POST["name"])); $name = str_replace(array("\r","\n"),array(" "," "),$name); $email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL); $message = trim($_POST["message"]); $recipient = "nexsmedia@gmail.com"; $subject = "New contact from $name"; $email_content = "Name: $name\n"; $email_content .= "Email: $email\n\n"; $email_content .= "Message:\n$message\n"; $email_headers = "From: $name <$email>"; mail($recipient, $subject, $email_content, $email_headers) ?> 会给你一个所需频率的基调:

import { Component } from '@angular/core';
import { NgForm } from '@angular/forms';
import { Http } from '@angular/http';

@Component({
    selector: 'app-contacto',
    templateUrl: './contacto.component.html',
    styleUrls: ['./contacto.component.scss']
})
export class ContactoComponent {
    title = 'Contacto';

    constructor( private http: Http){}

    url='http://myUrl.com/mailerscript.php';

    name:string;
    email:string;
    message:string;

    guardar( forma:NgForm ) {

        this.name = 'name='+forma.value.name;
        this.email = 'email='+forma.value.email;
        this.message = 'message='+forma.value.message;

        /*??*/
        this.http.post(this.url, "");

    }
}

然后我们可以使用缓冲区并执行类似的操作来播放它:

sin(2 * pi * frequency * i / sample_rate)

如果您需要更多示例代码,您可以在我刚开始here的小项目中看到我是如何做到的。