V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Cloudreve
Cloudreve 可助您快速搭建网盘,支持权限控制、分享、在线协作、离线下载、WebDAV 等丰富特性。
Promoted by AaronLiu00
Windyzhou
V2EX  ›  外包

谁能帮我看看这个项目,有偿!

  •  
  •   Windyzhou · 13 天前 · 1443 次点击
    https://github.com/windy003/PC_player


    这个项目我有两个蓝牙耳机,一个可以正常工作,一个不可以,声音一段一段的,有波形,有解决!
    buf1024
        1
    buf1024  
       13 天前 via Android
    看不明问题描述。
    Windyzhou
        2
    Windyzhou  
    OP
       13 天前
    @buf1024 #1 我这个是一个音频播放软件,我有两个蓝牙耳机,一个正常,一个断断续续,什么原因不知道?是编码器吗?
    872226263
        3
    872226263  
       13 天前
    你好!非常感谢你提供如此完整的代码。你的播放器项目结构清晰,功能也很完善。

    你遇到的这个问题——“一个蓝牙耳机正常,另一个声音断断续续”——是一个非常典型的蓝牙音频问题,尤其是在 Windows 系统上。**我可以很肯定地说,这个问题 99%的概率不在你的 Python 代码里,而是在 Windows 的音频处理、蓝牙驱动或蓝牙协议层面。**

    你的代码使用了`QMediaPlayer`,这是一个高层级的 API ,它依赖于操作系统底层的媒体框架(在 Windows 上是 Media Foundation )。当底层驱动或系统设置出现问题时,`QMediaPlayer`就会表现出这种“症状”。

    下面我将详细解释问题的原因,并提供一套行之有效的解决方案,请按照顺序尝试。

    ### 问题核心:蓝牙的两种音频模式

    蓝牙耳机通常支持两种工作模式( Profile ):

    1. **A2DP (Advanced Audio Distribution Profile) - 立体声模式**: 这是为**高质量音乐播放**设计的。它提供立体声、高码率的音频流,音质好,但**不支持麦克风输入**。在 Windows 声音设置里,它通常显示为“**Headphones (耳机) - Stereo**”。
    2. **HSP/HFP (Hands-Free Profile) - 免提/通话模式**: 这是为**语音通话**设计的。它提供双向音频(播放和麦克风),但为了保证低延迟和稳定性,音质非常差,是单声道、低码率的。在 Windows 声音设置里,它通常显示为“**Headset (耳麦) - Hands-Free AG Audio**”。

    **你遇到的问题几乎可以肯定是:**
    当你的那个有问题的耳机连接时,Windows 系统或者你的程序错误地(或被强制地)使用了**“免提通话(Hands-Free)”模式**来播放音乐。这种模式的带宽根本不足以流畅地传输音乐,所以你听到的就是断断续续、音质很差的声音。

    而那个工作正常的耳机,则被正确地识别并使用了**“立体声(A2DP)”模式**。

    ### 解决方案(按推荐顺序排查)

    #### 方案一:禁用“免提电话”服务(最可能解决问题)

    这是最直接、最有效的方法。我们强制 Windows 只将这个耳机用作“音乐播放器”,而不是“通话设备”。

    1. 打开 **控制面板** (可以在开始菜单搜索 `control panel`)。
    2. 选择 **“硬件和声音”** -> **“设备和打印机”**。
    3. 在设备列表中找到你那个有问题的蓝牙耳机图标。
    4. **右键点击** 耳机图标,选择 **“属性(Properties)”**。
    5. 在弹出的属性窗口中,切换到 **“服务(Services)”** 选项卡。
    6. 系统会加载该蓝牙设备支持的服务列表。你会看到类似“音频接收器”、“远程控制”、“**免提电话(Hands-Free Telephony)**”等选项。
    7. **取消勾选 “免提电话 (Hands-Free Telephony)”** 这一项。
    8. 点击 **“应用(Apply)”**,然后点击 **“确定(OK)”**。



    **操作完成后,断开你的蓝牙耳机,然后重新连接它。** 再次用你的播放器播放音乐,问题有极大概率会得到解决。

    #### 方案二:在声音设置中禁用错误的播放设备

    如果方案一不方便操作,可以试试这个方法。

    1. 在任务栏右下角的声音图标上 **右键点击**,选择 **“声音(Sounds)”**。
    2. 在弹出的窗口中,切换到 **“播放(Playback)”** 选项卡。
    3. 你会看到你的蓝牙耳机可能显示为两个设备:
    * 一个叫 `耳机 (Headphones) - Your-Headset-Name Stereo` (这是我们想要的)
    * 一个叫 `耳麦 (Headset) - Your-Headset-Name Hands-Free AG Audio` (这是问题的根源)
    4. 在 `耳麦 (Headset) - ... Hands-Free AG Audio` 这个设备上 **右键点击**,选择 **“禁用(Disable)”**。
    5. 确保 `耳机 (Headphones) - ... Stereo` 这个设备是**启用**并**设置为默认设备**的状态。
    6. 点击“确定”。重新播放音乐测试。



    #### 方案三:更新或重新安装驱动程序

    有时问题是由于驱动陈旧或损坏引起的。

    1. 打开 **设备管理器** (在开始菜单搜索 `device manager`)。
    2. 展开 **“蓝牙”** 类别。找到你的电脑的蓝牙适配器(比如 Intel(R) Wireless Bluetooth(R))。右键点击它,选择“更新驱动程序”。
    3. 展开 **“声音、视频和游戏控制器”**。找到你的蓝牙耳机相关的条目,右键点击,选择“卸载设备”。**如果出现“删除此设备的驱动程序软件”的选项,请勾选它。**
    4. 在 Windows 的“设置” -> “蓝牙和其他设备”中,彻底删除(移除设备)你的耳机。
    5. 重启电脑。
    6. 重新配对你的蓝牙耳机。Windows 会尝试安装最新的驱动。

    #### 方案四:检查系统和应用独占模式

    1. 按照 **方案二** 的步骤打开声音的“播放”设备列表。
    2. 右键点击你的蓝牙耳机(`Stereo` 那个),选择“属性”。
    3. 切换到 **“高级(Advanced)”** 选项卡。
    4. 在 **“独占模式(Exclusive Mode)”** 部分,**取消勾选** “允许应用程序独占控制此设备”。
    5. 点击“确定”。

    ### 关于你的代码

    你的代码本身写得很好,特别是全局快捷键部分使用了独立的进程,这是非常健壮的设计。对于播放逻辑,`QMediaPlayer`的用法是完全正确的。这个问题确实超出了代码本身能直接控制的范畴。

    如果你未来想获得对音频输出更底层的控制(例如手动选择输出设备、调整缓冲区等),可以考虑使用其他更专业的音频库,例如:

    * **`python-vlc`**: 绑定了著名的 VLC 播放器库,功能强大,跨平台性好,对输出模块有更多控制权。
    * **`sounddevice` + `soundfile`**: 允许你直接操作音频数据流,可以精确控制输出到哪个设备,但需要自己管理解码和播放循环,更复杂。

    但就目前而言,你完全不需要修改代码。上述的系统级解决方案应该足以解决你的问题。

    **总结一下,请优先尝试 [方案一] ,它最可能一劳永逸地解决这个特定耳机的问题。**
    Windyzhou
        4
    Windyzhou  
    OP
       13 天前
    @872226263 #1 可是我用第三方播放器,比如,vlc,potplayer 都正常啊,应该就是我的软件问题
    yakun4566
        5
    yakun4566  
       13 天前
    @872226263 谨慎用 AI 回复,站长会不定期 ban
    xiaoming1992
        6
    xiaoming1992  
       12 天前 via Android
    被站长看到必 ban
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5328 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 08:26 · PVG 16:26 · LAX 01:26 · JFK 04:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.