2013-03-27 2 views
4

Я использую эту библиотеку https://github.com/ahawker/NLibsndfile для конвертирования аудио файлов с libSndFile из C#, я сделал этот метод, для преобразования (кроющие Wav в AIFF):Получить дескриптор файла Ручка из 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 всегда возвращает нулевой указатель. Библиотечный метод таков: internal static extern IntPtr sf_open_fd(int handle, LibsndfileMode mode, ref LibsndfileInfo info, int closeHandle);

Любая идея, почему не работает операция? или как получить дескриптор дескриптора файла из FileStream?

ответ