惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Securelist
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
WordPress大学
WordPress大学
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tailwind CSS Blog
V
V2EX
小众软件
小众软件
博客园 - 聂微东
H
Help Net Security
阮一峰的网络日志
阮一峰的网络日志
云风的 BLOG
云风的 BLOG
Blog — PlanetScale
Blog — PlanetScale
M
MIT News - Artificial intelligence
人人都是产品经理
人人都是产品经理
F
Fortinet All Blogs
S
Schneier on Security
Martin Fowler
Martin Fowler
MyScale Blog
MyScale Blog
Vercel News
Vercel News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Google DeepMind News
Google DeepMind News
Google Online Security Blog
Google Online Security Blog
Webroot Blog
Webroot Blog
A
Arctic Wolf
量子位
博客园 - 叶小钗
I
Intezer
C
Check Point Blog
Cloudbric
Cloudbric
IT之家
IT之家
Last Week in AI
Last Week in AI
GbyAI
GbyAI
Attack and Defense Labs
Attack and Defense Labs
T
The Blog of Author Tim Ferriss
Y
Y Combinator Blog
Jina AI
Jina AI
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Threat Research - Cisco Blogs
C
CERT Recently Published Vulnerability Notes
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cisco Blogs
J
Java Code Geeks
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Engineering at Meta
Engineering at Meta
酷 壳 – CoolShell
酷 壳 – CoolShell
L
Lohrmann on Cybersecurity
有赞技术团队
有赞技术团队
Simon Willison's Weblog
Simon Willison's Weblog
The Register - Security
The Register - Security
T
Threatpost

博客园 - 落木

PowerDesigner中NAME和COMMENT的互相转换,需要执行语句 获取网站根目录的urli源代码 - 落木 - 博客园 Control的Invoke和BeginInvoke 扩大范围的多条件查询 用.net的GetCallbackEventReference函数来实现dropDownList联动的ajax效果 处理SQLSERVER死锁(转载) 调用DirectX进行简单的多媒体编程系列(四) 调用DirectX进行简单的多媒体编程系列(二) 调用DirectX进行简单的多媒体编程系列(一) 数据库分页算法 mysql想说爱你不容易啊,从mssql迁移到mysql时,几乎所有的存储过程都得改,语法相差很大,累人!! 自己写的sqlserver和mysql的行转列通用存储过程 MSSQL优化文章 C#中编写sqlserver中自定义函数,实现复杂报表 Ajax使用Post方式提交到.aspx页面交互的例子 核单台帐表(存储过程) 清欠率(存储过程) ExtJS中的面向对象设计,组件化编程思想 - 落木 - 博客园 ExtJS中如何扩展自定义的类
调用DirectX进行简单的多媒体编程系列(三)
落木 · 2009-12-04 · via 博客园 - 落木

以上把基本的类写好了,下面就可以开始编写前台代码了。先来个截图


 直接上代码吧

 using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QBAudioLib;namespace QBAudio
{
    
public partial class Form2 : Form
    {
        QBAudioCtrl qbCtrl;
        DeviceStatus devStauts;
        PlayFlags thisFlags;
public Form2()
        {
            InitializeComponent();

        }

private void Form2_Load(object sender, EventArgs e)//初始化
        {
            
//获得所有的音频设备
            List<DeviceInfo> devInfo = QBDeviceHelper.GetDeviceList();
            
foreach (DeviceInfo dev in devInfo)
            {
                cBox_Devices.Items.Add(dev.DevId);
            }
this.thisFlags = PlayFlags.Default;
        }
private void btn_play_Click(object sender, EventArgs e)//播放
        {
            
try
            {
                qbCtrl.Dev_Play(
this.thisFlags);
                devStauts 
= qbCtrl.GetDeviceStatus();
                lbl_status.Text 
= "playing:" + devStauts.isPlaying.ToString() + "---looping:" + devStauts.isLooping + "---Terminated:" + devStauts.isTerminated;
            }
            
catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
private void btn_stop_Click(object sender, EventArgs e)//停止
        {
            
try
            {
                qbCtrl.Dev_Stop();
                devStauts 
= qbCtrl.GetDeviceStatus();
                lbl_status.Text 
= "playing:" + devStauts.isPlaying.ToString() + "---looping:" + devStauts.isLooping + "---Terminated:" + devStauts.isTerminated;
            }
            
catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
private void btn_File_Click(object sender, EventArgs e)//选择播放文件
        {
            OpenFileDialog filedg 
= new OpenFileDialog();
            filedg.Filter 
= "音视频文件(*.wav)|*.wav";
            
if (filedg.ShowDialog() == DialogResult.OK)
            {
                
if (filedg.FileName != "" || filedg.FileName != string.Empty)
                {
                    txt_File.Text 
= filedg.FileName;
                }
            }
        }
private void cBox_Devices_SelectedIndexChanged(object sender, EventArgs e)//选择声卡
        {
            
try
            {
                
//thisDev = (DeviceInfo)cBox_Devices.SelectedItem;
                Guid devID = (Guid)cBox_Devices.SelectedItem;
                
string fileName = txt_File.Text.Trim();
                
if (fileName == null || fileName == string.Empty)
                {
                    MessageBox.Show(
"请选择播放的文件...");
                    
return;
                }
                qbCtrl 
= new QBAudioCtrl(devID, fileName);
                devStauts 
= qbCtrl.GetDeviceStatus();
                lbl_status.Text 
= "playing:" + devStauts.isPlaying.ToString() + "---looping:" + devStauts.isLooping + "---Terminated:" + devStauts.isTerminated;
            }
            
catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }

private void btn_pause_Click(object sender, EventArgs e)//暂停
        {
            
try
            {
                qbCtrl.Dev_Dispose();
            }
            
catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
private void radioButton1_CheckedChanged(object sender, EventArgs e)//设置正常播放
        {
            
if (radioButton1.Checked)
            {
                thisFlags 
= PlayFlags.Default;
                btn_play_Click(sender, e);
            }
        }
private void radioButton2_CheckedChanged(object sender, EventArgs e)//设置循环播放
        {
            
if (radioButton2.Checked)
            {
                thisFlags 
= PlayFlags.Looping;
                btn_play_Click(sender, e);
            }
        }
    }
}