当前位置: 首页 > news >正文

查建筑公司网站建设网站费用明细

查建筑公司网站,建设网站费用明细,wordpress ajax登录,网站内部优化有哪些内容一.QT6音频调用及与QT5的区别 1.音频输入 QAudioSource代替QAudioInput类 QAudioSource类提供了一个接口#xff0c;用于从音频输入设备接收音频数据。 Header: #include QAudioSource qmake: QT multimedia 2.音频输出 QAudioSink代替QAudioOutput类 QAudioSi…一.QT6音频调用及与QT5的区别 1.音频输入 QAudioSource代替QAudioInput类 QAudioSource类提供了一个接口用于从音频输入设备接收音频数据。 Header: #include QAudioSource qmake: QT multimedia 2.音频输出 QAudioSink代替QAudioOutput类 QAudioSink类提供了一个接口用于将音频数据发送到音频输出设备。 Header: #include QAudioSink qmake: QT multimedia 二.代码示例 其功能为本地产生一些声音数据然后输出到扬声器或者耳机。 可以应用在通过网络接收的声音数据然后输出到音频播放设备 代码为纯qt实现可以应用在windows、linux和android上无需修改。 1.audiooutput.h #ifndef AUDIOOUTPUT_H #define AUDIOOUTPUT_H #include QAudioSink #include QByteArray #include QComboBox #include QIODevice #include QLabel #include QMainWindow #include QMediaDevices #include QObject #include QPushButton #include QScopedPointer #include QSlider #include QTimer #include math.h class Generator : public QIODevice { Q_OBJECT public: Generator(const QAudioFormat format, qint64 durationUs, int sampleRate); void start(); void stop(); qint64 readData(char *data, qint64 maxlen) override; qint64 writeData(const char *data, qint64 len) override; qint64 bytesAvailable() const override; qint64 size() const override { return m_buffer.size(); } private: void generateData(const QAudioFormat format, qint64 durationUs, int sampleRate); private: qint64 m_pos 0; QByteArray m_buffer; }; class AudioTest : public QMainWindow { Q_OBJECT public: AudioTest(); ~AudioTest(); private: void initializeWindow(); void initializeAudio(const QAudioDevice deviceInfo); private: QMediaDevices *m_devices nullptr; QTimer *m_pushTimer nullptr; // Owned by layout QPushButton *m_modeButton nullptr; QPushButton *m_suspendResumeButton nullptr; QComboBox *m_deviceBox nullptr; QLabel *m_volumeLabel nullptr; QSlider *m_volumeSlider nullptr; QScopedPointerGenerator m_generator; QScopedPointerQAudioSink m_audioOutput; bool m_pullMode true; private slots: void toggleMode(); void toggleSuspendResume(); void deviceChanged(int index); void volumeChanged(int); void updateAudioDevices(); }; #endif // AUDIOOUTPUT_H 2.audiooutput.cpp #include audiooutput.h #include QAudioDevice #include QAudioSink #include QDebug #include QVBoxLayout #include QtEndian #include QtMath Generator::Generator(const QAudioFormat format, qint64 durationUs, int sampleRate) { if (format.isValid()) generateData(format, durationUs, sampleRate); } void Generator::start() { open(QIODevice::ReadOnly); } void Generator::stop() { m_pos 0; close(); } void Generator::generateData(const QAudioFormat format, qint64 durationUs, int sampleRate) { const int channelBytes format.bytesPerSample(); const int sampleBytes format.channelCount() * channelBytes; qint64 length format.bytesForDuration(durationUs); Q_ASSERT(length % sampleBytes 0); Q_UNUSED(sampleBytes); // suppress warning in release builds m_buffer.resize(length); unsigned char *ptr reinterpret_castunsigned char *(m_buffer.data()); int sampleIndex 0; while (length) { // Produces value (-1..1) const qreal x qSin(2 * M_PI * sampleRate * qreal(sampleIndex % format.sampleRate()) / format.sampleRate()); for (int i 0; i format.channelCount(); i) { switch (format.sampleFormat()) { case QAudioFormat::UInt8: *reinterpret_castquint8 *(ptr) static_castquint8((1.0 x) / 2 * 255); break; case QAudioFormat::Int16: *reinterpret_castqint16 *(ptr) static_castqint16(x * 32767); break; case QAudioFormat::Int32: *reinterpret_castqint32 *(ptr) static_castqint32(x * std::numeric_limitsqint32::max()); break; case QAudioFormat::Float: *reinterpret_castfloat *(ptr) x; break; default: break; } ptr channelBytes; length - channelBytes; } } } qint64 Generator::readData(char *data, qint64 len) { qint64 total 0; if (!m_buffer.isEmpty()) { while (len - total 0) { const qint64 chunk qMin((m_buffer.size() - m_pos), len - total); memcpy(data total, m_buffer.constData() m_pos, chunk); m_pos (m_pos chunk) % m_buffer.size(); total chunk; } } return total; } qint64 Generator::writeData(const char *data, qint64 len) { Q_UNUSED(data); Q_UNUSED(len); return 0; } qint64 Generator::bytesAvailable() const { return m_buffer.size() QIODevice::bytesAvailable(); } AudioTest::AudioTest() : m_devices(new QMediaDevices(this)), m_pushTimer(new QTimer(this)) { initializeWindow(); initializeAudio(m_devices-defaultAudioOutput()); qDebug()11111111111111111111; } AudioTest::~AudioTest() { m_pushTimer-stop(); } void AudioTest::initializeWindow() { QWidget *window new QWidget; QVBoxLayout *layout new QVBoxLayout; m_deviceBox new QComboBox(this); const QAudioDevice defaultDeviceInfo m_devices-defaultAudioOutput(); m_deviceBox-addItem(defaultDeviceInfo.description(), QVariant::fromValue(defaultDeviceInfo)); for (auto deviceInfo : m_devices-audioOutputs()) { if (deviceInfo ! defaultDeviceInfo) m_deviceBox-addItem(deviceInfo.description(), QVariant::fromValue(deviceInfo)); } connect(m_deviceBox, QOverloadint::of(QComboBox::activated), this, AudioTest::deviceChanged); connect(m_devices, QMediaDevices::audioOutputsChanged, this, AudioTest::updateAudioDevices); layout-addWidget(m_deviceBox); m_modeButton new QPushButton(this); connect(m_modeButton, QPushButton::clicked, this, AudioTest::toggleMode); layout-addWidget(m_modeButton); m_suspendResumeButton new QPushButton(this); connect(m_suspendResumeButton, QPushButton::clicked, this, AudioTest::toggleSuspendResume); layout-addWidget(m_suspendResumeButton); QHBoxLayout *volumeBox new QHBoxLayout; m_volumeLabel new QLabel; m_volumeLabel-setText(tr(Volume:)); m_volumeSlider new QSlider(Qt::Horizontal); m_volumeSlider-setMinimum(0); m_volumeSlider-setMaximum(100); m_volumeSlider-setSingleStep(10); connect(m_volumeSlider, QSlider::valueChanged, this, AudioTest::volumeChanged); volumeBox-addWidget(m_volumeLabel); volumeBox-addWidget(m_volumeSlider); layout-addLayout(volumeBox); window-setLayout(layout); setCentralWidget(window); window-show(); } void AudioTest::initializeAudio(const QAudioDevice deviceInfo) { QAudioFormat format deviceInfo.preferredFormat(); const int durationSeconds 1; const int toneSampleRateHz 600; m_generator.reset(new Generator(format, durationSeconds * 1000000, toneSampleRateHz)); m_audioOutput.reset(new QAudioSink(deviceInfo, format)); m_generator-start(); qreal initialVolume QAudio::convertVolume(m_audioOutput-volume(), QAudio::LinearVolumeScale, QAudio::LogarithmicVolumeScale); m_volumeSlider-setValue(qRound(initialVolume * 100)); toggleMode(); } void AudioTest::deviceChanged(int index) { m_generator-stop(); m_audioOutput-stop(); m_audioOutput-disconnect(this); initializeAudio(m_deviceBox-itemData(index).valueQAudioDevice()); } void AudioTest::volumeChanged(int value) { qreal linearVolume QAudio::convertVolume(value / qreal(100), QAudio::LogarithmicVolumeScale, QAudio::LinearVolumeScale); m_audioOutput-setVolume(linearVolume); } void AudioTest::updateAudioDevices() { m_deviceBox-clear(); const QListQAudioDevice devices m_devices-audioOutputs(); for (const QAudioDevice deviceInfo : devices) m_deviceBox-addItem(deviceInfo.description(), QVariant::fromValue(deviceInfo)); } void AudioTest::toggleMode() { m_pushTimer-stop(); m_audioOutput-stop(); toggleSuspendResume(); if (m_pullMode) { // switch to pull mode (QAudioSink pulls from Generator as needed) m_modeButton-setText(tr(Enable push mode)); m_audioOutput-start(m_generator.data()); } else { // switch to push mode (periodically push to QAudioSink using a timer) m_modeButton-setText(tr(Enable pull mode)); auto io m_audioOutput-start(); m_pushTimer-disconnect(); connect(m_pushTimer, QTimer::timeout, [this, io]() { if (m_audioOutput-state() QAudio::StoppedState) return; int len m_audioOutput-bytesFree(); QByteArray buffer(len, 0); len m_generator-read(buffer.data(), len); if (len) io-write(buffer.data(), len); }); m_pushTimer-start(10); } m_pullMode !m_pullMode; } void AudioTest::toggleSuspendResume() { if (m_audioOutput-state() QAudio::SuspendedState || m_audioOutput-state() QAudio::StoppedState) { m_audioOutput-resume(); m_suspendResumeButton-setText(tr(Suspend playback)); } else if (m_audioOutput-state() QAudio::ActiveState) { m_audioOutput-suspend(); m_suspendResumeButton-setText(tr(Resume playback)); } else if (m_audioOutput-state() QAudio::IdleState) { // no-op } } 3.测试页面 可以选择输出设备音量调节停止和继续。 代码下载地址https://download.csdn.net/download/xieliru/89050304
http://www.pierceye.com/news/820726/

相关文章:

  • 搞一个网站要多少钱长治做网站哪家好
  • 德州口碑好的网站制作公司网站运营托管咨询
  • 东阳网站建设价格广州最好的网站设计
  • 襄垣网站建设宝塔面板怎么搭建网站
  • 电影网站源码access广州网站建设排名一览表
  • 做论坛网站多少钱企业做网站有用吗天涯
  • 做网站价格多少钱网站设计培训课程
  • 做网站找什么公司好淘宝客网站可以做百度推广
  • 北京网站建设首选石榴汇企业vi设计一整套
  • 做网站较好的公司c 网站开发培训
  • 一个云主机怎么挂两个网站建立网站要准备多少钱
  • 贵阳网站建设在线学做凉菜冷菜的网站
  • 购销网站建设视频百度云广东省深圳市龙华区
  • 做建材外贸哪个网站比较好乐清比较好的设计公司
  • 做电影种子下载网站违法吗桂林网站建设凡森网络
  • 云南省建设厅专家注册网站织梦网站怎么做下载地址
  • 你们需要网站建设搜索引擎调词平台多少钱
  • 北京建设官方网站百度公司官网首页
  • 四川禾力建设工程质量检测有限公司网站惠州有哪些做网站的公司
  • 深圳手机网站设计公司php网站安装图解
  • 网站开发 工作职责平面设计和室内设计有什么区别
  • 防城港门面做网站的代做网站跳转
  • 珠海网站系统建设苏州房地产网站建设
  • 长治网站建设培训文件检察院网站建设
  • 茶文化网站制作asa8.4 做网站映射
  • 网站建设步骤 文档富阳做网站洛洛科技
  • 列举网站建设的SEO策略广东建设行业招聘 什么网站
  • 免费社区建站系统seo是指什么
  • 网站建设实训的认识小企业网站建设哪里做得好
  • 无锡seo网站排名优化牟平建设企业网站