에서 파일 설명자 핸들을 가져올 나는이 라이브러리 https://github.com/ahawker/NLibsndfile를 사용하는 C#을에서 libSndFile으로 오디오 파일을 변환하고있어, 내가 변환이 방법을, 한 (깃 AIFF에 WAV) :하여 FileStream
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
메서드는 항상 null 포인터를 반환합니다. 라이브러리 메소드는 다음과 같습니다. internal static extern IntPtr sf_open_fd(int handle, LibsndfileMode mode, ref LibsndfileInfo info, int closeHandle);
왜 작동에 실패했는지 알 수 있습니까? FileStream에서 File Descriptor Handler를 가져 오는 방법은 무엇입니까?