gpt4 book ai didi

c# - 从 FileStream 获取文件描述符句柄

转载 作者:太空狗 更新时间:2023-10-30 01:21:26 27 4
gpt4 key购买 nike

我正在使用这个库 https://github.com/ahawker/NLibsndfile为了使用 C# 中的 libSndFile 转换音频文件,我采用了这种方法进行转换(将 wav 转换为 aiff):

        string sourcePath = "/User/Dev/Desktop/a.wav";
string targetPath = "/User/Dev/Desktop/b.aiff";

var file = File.Create(targetPath);
file.Close();
file.Dispose();
IntPtr ptrTargetFile = file.SafeFileHandle.DangerousGetHandle();

LibsndfileInfo wavInfo = new LibsndfileInfo();
LibsndfileInfo aiffInfo = new LibsndfileInfo();
LibsndfileApi api = new LibsndfileApi();

var wavFile = api.Open(sourcePath, LibsndfileMode.Read, ref wavInfo);
var aiffFile = api.OpenFileDescriptor((int)ptrTargetFile, LibsndfileMode.Rdwr, ref aiffInfo, 0);

aiffInfo.Channels = wavInfo.Channels;
aiffInfo.SampleRate = wavInfo.SampleRate;
aiffInfo.Format = LibsndfileFormat.Aiff;

short[] buffer = new short[512];

long countOfItemsWritten = 0;
long countOfItemsReaded = 0;

while ((countOfItemsReaded=api.ReadItems(wavFile, buffer, buffer.Length))>0)
countOfItemsWritten = api.WriteItems(aiffFile, buffer, countOfItemsReaded);

api.Close(wavFile);
api.Close(aiffFile);

问题是在打开 aiff 文件时,api.OpenFileDescriptor 方法总是返回空指针。库方法是这样的:internal static extern IntPtr sf_open_fd(int handle, LibsndfileMode mode, ref LibsndfileInfo info, int closeHandle);

知道操作失败的原因吗?或者如何从 FileStream 获取文件 Descriptor Handler?

最佳答案

你可以这样获取描述符:

第一次使用FileStream.SafeFileHandle并使用它的值来访问 SafeHandle.DangerousGetHandle()

所以:IntPtr handle = fileStream.SafeFileHandle.DangerousGetHandle();

关于c# - 从 FileStream 获取文件描述符句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15669662/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com