import win32file import struct import numpy as np from pydub import AudioSegment from pydub.playback import play 打开命名管道 pipe = win32file.CreateFile("\\.\pipe\myPipe", win32file.GENERIC_READ, 0, None, win32file.OPEN_EXISTING, 0, None) 接收C++进程传输的实时音频信息 读取音频信息 buffer = win32file.ReadFile(pipe, 10444800) 解析 unsigned char 数组为 int16 数组 audioBuffer = np.array(struct.unpack("<" + str(len(buffer) // 2) + "h", buffer)) 将一维数组重塑为二维数组,形状为(64, 8160) reshapedBuffer = audioBuffer.reshape((64, 81600)) audio = AudioSegment( data=reshapedBuffer.tobytes(), sample_width=2, # 16位音频,每个采样点占用2个字节 frame_rate=192000, channels=64 ) 播放音频 play(audio) 关闭命名管道 win32file.CloseHandle(pipe)存在错误,:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\pydub\utils.py:170: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning) C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\pydub\utils.py:184: RuntimeWarning: Couldn't find ffplay or avplay - defaulting to ffplay, but may not work warn("Couldn't find ffplay or avplay - defaulting to ffplay, but may not work", RuntimeWarning) Traceback (most recent call last): File "D:\桌面\test\location.py", line 28, in <module> play(audio) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\pydub\playback.py", line 71, in play _play_with_ffplay(audio_segment) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\pydub\playback.py", line 15, in _play_with_ffplay seg.export(f.name, "wav") File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\pydub\audio_segment.py", line 867, in export out_f, _ = _fd_or_path_or_tempfile(out_f, 'wb+') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\pydub\utils.py", line 60, in _fd_or_path_or_tempfile fd = open(fd, mode=mode) ^^^^^^^^^^^^^^^^^^^ PermissionError: [Errno 13] Permission denied: 'C:\Users\ADMINI~1\AppData\Local\Temp\tmpg196jawm.wav' 进程已结束,退出代码1 如何更改
时间: 2023-08-09 15:04:35 浏览: 225
您遇到的错误是权限错误,指示您没有权限将音频文件保存到指定的路径。您可以尝试以下解决方法:
1. 以管理员身份运行您的Python脚本。右键单击脚本文件并选择“以管理员身份运行”。
2. 将导出音频文件的路径更改为您具有写入权限的其他目录。例如,将`seg.export(f.name, "wav")`中的`f.name`更改为包含完整文件路径的字符串。
3. 如果您没有访问其他目录的写入权限,可以尝试更改临时文件的存储位置。在代码中添加以下行以更改临时文件路径:
```python
import tempfile
tempfile.tempdir = '其他目录'
```
请确保将'其他目录'替换为您有写入权限的实际目录。
通过这些方法,您应该能够解决权限错误并成功更改导出音频文件的位置。
相关问题
import win32file import struct import numpy as np from pydub import AudioSegment from pydub.playback import play # 打开命名管道 pipe = win32file.CreateFile("\\\\.\\pipe\\myPipe", win32file.GENERIC_READ, 0, None, win32file.OPEN_EXISTING, 0, None) # 接收C++进程传输的实时音频信息 # 读取音频信息 buffer = win32file.ReadFile(pipe, 1044480)[1] # 解析 unsigned char 数组为 int16 数组 audioBuffer = np.array(struct.unpack("<" + str(len(buffer) // 2) + "h", buffer)) # 将一维数组重塑为二维数组,形状为(64, 8160) reshapedBuffer = audioBuffer.reshape((64, 8160)) audio = AudioSegment( data=reshapedBuffer.tobytes(), sample_width=2, # 16位音频,每个采样点占用2个字节 frame_rate=192000, channels=64 ) # 播放音频 play(audio) # 关闭命名管道 win32file.CloseHandle(pipe)中存在错误PermissionError: [Errno 13] Permission denied: 'C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\tmpfbfjoq9r.wav',如何解决,怎么操作?
根据您提供的代码和错误信息,看起来问题出现在尝试播放音频时。错误提示是权限被拒绝,无法创建临时的.wav文件。
这个问题可能是由于您的程序没有足够的权限在指定路径创建临时文件导致的。
您可以尝试以下解决方法:
1. 确保您的程序运行时具有足够的权限来在指定路径创建临时文件。如果您在Windows操作系统上运行程序,请尝试以管理员身份运行程序。
2. 检查您的防火墙或安全软件设置,确保它们不会阻止程序创建临时文件。
3. 尝试更改导出音频文件的路径,以避免在受限制的目录下创建临时文件。您可以使用其他位置或指定不同的文件名。
此外,您还可以尝试直接播放音频数据,而不需要将其导出为临时文件。以下是一个示例代码片段,演示了如何使用pydub播放音频数据:
```python
# 播放音频
play(audio.export(format="wav"))
```
这将直接将音频数据传递给播放函数,而无需创建临时文件。
如果问题仍然存在,请提供更多关于您的操作系统和完整的代码片段,以便我可以更好地帮助您解决问题。
import os import struct import numpy as np # 读取标签数据集 with open('./train-labels.idx1-ubyte', 'rb') as lbpath: labels_magic, labels_num = struct.unpack('>II', lbpath.read(8)) labels = np.fromfile(lbpath, dtype=np.uint8) # 读取图片数据集
这段代码是Python中导入三个模块:os、struct、以及numpy。os模块提供了一些与操作系统交互的函数;struct模块用于解析和打包数据,通常用于二进制数据;numpy是Python中科学计算的基本库,提供了高效的数组计算和数学函数。
阅读全文