IOCTL_CDROM_RAW_RAEDでCDDAの生データが読み取れない

このQ&Aのポイント
  • IOCTL_CDROM_RAW_RAEDを使ってCDDAの生データを読み取るプログラムを作成したが、エラー87「パラメータが間違っています」という問題が発生し、データを読み取ることができない。
  • 海外のサイトで同様の問題について検索したが、オーディオCD(CDDA)では問題なく動作するが、CD-ROMでは問題が発生するという情報が得られた。
  • 開発環境はBorland C++Builder6で、ウィンドウズアプリとして開発している。IOCTL_CDROM_READ_TOCを用いたTOCの読み取りは正常に動作しており、ファイルのオープンも正しく行えている。
回答を見る
  • ベストアンサー

IOCTL_CDROM_RAW_RAEDで生データが読めない

IOCTL_CDROM_RAW_RAEDを使ってCDDAの生データを読み取るプログラムを作成しましたが、エラー87「パラメータが間違っています」が発生して、データを読み取ることができません。プログラムは以下の通りです。 #define RAW_SECTOR_SIZE 2352 rawReadInfo.DiskOffset.QuadPart = startSector * RAW_SECTOR_SIZE; rawReadInfo.SectorCount = 1; rawReadInfo.TrackMode = CDDA; DeviceIoControl (hCD, IOCTL_CDROM_RAW_READ, &rawReadInfo, sizeof(RAW_READ_INFO), buf, sizeof(rawReadInfo.SectorCount * RAW_SECTOR_SIZE), &dwNotUsed, NULL); 海外のサイトで検索してみたところ、ときどきエラー87が出る、オーディオCD(CDDA)ではOKだが、CD-ROMではダメなどのQ&Aはあったのですが、オーディオCDが全く読めないという例はなかったので、基本的には動作するはずです。パラメータもそれらの例と同様の使い方しているつもりなのですが、何故か全く動作しません。TracKModeをYellowMode2にして、CD-ROMで試してみましたが、結果は同じでした。IOCTL_CDROM_READ_TOCを用いたTOCの読み取りは問題ないので、ファイルのオープンは正しくできていると思います。 IOCTL_CDROM_RAW_RAEDを使えている人がいたら、どこに問題がありそうか教えてください。 開発環境はBorland C++Builder6で、対象はウィンドウズ ・アプリです。

質問者が選んだベストアンサー

  • ベストアンサー
  • mcWalker
  • ベストアンサー率69% (27/39)
回答No.1

もう解決済みかもしれませんが、レスがないようなのでご参考まで。 ...RAW_READ ではありませんが、私も IOCTL_CDROM_GET_DRIVE_GEOMETRY がうまく行かず、聞きましたら 9x では、ASPI, NT(xp) では、SPTI で scsi へ access した方がいいのではないかと教えてもらいました。 私は、2048 bytes 読めればよいので、16 sector を (xpでは) ReadFile() で読むことで geometry を得て 今のところ済ませています。 http://www.t10.org/ftp/t10/drafts/sbc2/sbc2r15.pdf に ANSI の説明書があります。 ご覧になったらどうでしょうか。 また、これに従うには、nt4ddk が必要ですが、 お持ちでないなら、microsoft から nt4ddk.zip を落としてきて 中から header file を取り出す必要があります。 cdda を扱っている例は、spticdda.lzh でぐぐると ソースがあります。

関連するQ&A

  • CD/CDROMからNexusへ音声を移動させたい

    CD/CDROMからNexusへCD音楽を移動したい スマフォ(Android4.?)と、PC(wein7 x64 ultimate)と、Nexus7 をもっています。 また、Nexus7用に、もとの細長USB(名称失念)をよくあるUSB(PCnよく付いてるやつ) に変換するアダプタも持ってます。 で、CD(CD-ROM)に入ってる音楽(※)をNexus7に移したいのですが、 どうすればいいでしょうか? (※) ただし、オーディオ形式もあれば、 mp3形式(ようはCDウォークマンとかで聞けないの両方があります。 なおすべて、音楽ではない(TOEICの本についてたCD(ROM))なので、 音質に問題なければ、サイズ容量を抑えたいです。 また、できれば、各曲(というか、音声トラック?)ごとのタイトルも表示させたいです。 できれば自力でなく、自動的に。。。 そうすると、なんかしらNexus側でアプリ必要でしょうか? p.s. スマフォなら、SDカードがあるので、たぶんできるのですが・・・ アプリのAidroidとか使うと楽でしょうか? (ただ、使い方がわからず。。。) どうぞ、よろしくお願いします

  • OpenCVでRAW画像(カラー)を開くには

    OpenCVを使って、テキスト形式のヘッダーありのRAW画像(カラー)を、Cで書いたプログラムで開きたいのですが、 うまくいかず困っています。 “LoadRawImage”というWindowが起動しますが、真黒で何も表示されません。 RAW画像を開く関数myRawImageは以下のurlの「RAWデータの読み込みと表示」を参照させていただきました。(すみません、どうもありがとうございます。) http://wiki.livedoor.jp/mikk_ni3_92/d/raw%a5%c7%a1%bc%a5%bf%a4%ce%c6%c9%a4%df%b9%fe%a4%df%a4%c8%c9%bd%bc%a8 画像サイズはわかっているので、bmpなどに変換せず、RAWのまま開きたいのですが、どこを直せばいいのでしょうか。 どなたかヒントでも教えていただけると大変助かります、どうぞよろしくお願い致します。 //test.cpp #include <cv.h> #include <highgui.h> #include <iostream> #include <fstream> #include "raw_data_show.h" int main (int argc, char ** argv)================= { int x, y,i; uchar p1[3], p2[3]; IplImage *img1, *img2, *cp_img; img1 = myRawImage("D:\\My Pictures\\...\rawimage",500,500,3); cvShowImage("Load RawImage",img1); cvWaitKey(0); ============================================== #include <cv.h> #include <cxcore.h> #include <highgui.h> #include <iostream> #include <fstream> IplImage *myRawImage(char *filename, int w,int h,int channels) { if((channels != 3) && (channels != 1)) { std::cerr << " channel is not 3 or 1\n"; return NULL; } std::fstream ifs(filename,std::ios::in|std::ios::binary); if(!ifs.is_open()) { return NULL; } CvMat *Mat = cvCreateMat(h,w,CV_8UC3); ifs.read(reinterpret_cast<char*>(Mat->data.ptr),w*h*3); ifs.close(); IplImage img_hdr; IplImage *dst_img = cvGetImage (Mat, &img_hdr); IplImage *clone = cvCloneImage(dst_img);//クローン作成 cvReleaseImage(&dst_img); cvReleaseMat(&Mat); if(channels == 3){ for (i = 0; i < size; i++) { for (j = 0; j < size; j++) { CvMat m; float ret = 0.0; float a[] = { float (j) / size, float (i) / size }; cvInitMatHeader (&m, 1, 2, CV_32FC1, a); ret = svm.predict (&m); switch ((int) ret) { case 1: rcolor = CV_RGB (100, 0, 0); break; case 2: rcolor = CV_RGB (0, 100, 0); break; case 3: rcolor = CV_RGB (0, 0, 100); break; } cvSet2D (img, i, j, rcolor); } } cvCvtColor(clone,clone,CV_RGBA2BGR); return clone; } ========================================================

  • raw形式からbmp形式への書き込み (画像処理)

    今、raw形式のファイルを読み込んで、bmp形式への書き込みを 行うプログラムを作成しているのですがうまくいきません. 作成したプログラムの一部は以下のようになっています. ------------------rawファイルを読み込む関数の一部------------- //1次元配列の確保 tmp=us_Calloc2(width,height); //画像の読み込み fread(tmp,sizeof(unsigned short),width*height,fp); //2次元配列の確保 img->data=us_Calloc1(width,height); //1次元配列から2次元配列にデータを移動する for(i=0; i<height; i++){ for(j=0; j<width; j++){ img->data[i][j]=tmp[(width*i)+j]; } } ------------------------------------------------------------ --------------bmpファイルに書きこむ(一部)-------------- //bufのメモリ領域の確保 buf=us_Calloc2(width,height); for(i=0; i<height; i++){ for(j=0; j<width; j++){ buf[(width*i)+j]=img->data[i][j]; } } //BMPのファイルヘッダーの出力(省略) //BMPの情報ヘッダーの出力(省略) //画像データの出力 if(fwrite(buf,sizeof(unsigned short),size,fp)!=size){ printf("画像をBMPに書き込むことができませんでした.\n"); free(buf); fclose(fp); exit(-1); } } このように書いたのですが、うまくBMPファイルに出力できません. アドバイスよろしくお願いします.

  • フロッピーセクタアクセスに関して

    初めてお目にかかります。 今、PC98で書き込みを行ったフロッピーディスクを読み取るプログラムを作成しています。 インターネットにて調べて見ましたが、うまくいかない状態です。 問題点等あれば教えていただきたいと思います。 実行環境:Windows XP SP2 ドライブ:LOGITEC LFD-31U4 (USB:3モード) 開発言語:VC++(VS2005にて) BOOL Direct_Drive_Access(char *Drive){   HANDLE hHandle;   DISK_GEOMETRY disket;   DWORD dw1;   BOOL ret;   //ハンドルの取得   hHandle = CreateFile(Drive,GENERIC_READ , FILE_SHARE_READ,NULL,OPEN_EXISTING, NULL, NULL);   if ( hHandle != INVALID_HANDLE_VALUE ){     //FDの情報を取得     ret = DeviceIoControl(hHandle,IOCTL_DISK_GET_DRIVE_GEOMETRY,NULL,0,&disket,sizeof(disket),&dw1,NULL);     if (!ret) return FALSE;   } } 上記のソースにて取得したdisketの内容が、1.44MBのフロッピーでした。 (この情報だと、次のReadFile関数で"1785:フォーマットされていません"のエラーが返ります) 実際は、Cylinder - 77 Track - 2 Sector - 26 Byte - 256 でフォーマットしているフロッピーです。 BIOS経由のアクセスも調べましたが、32bitOSのため、使用できない様でした。 これから何を調べていいかも分からない状態なので、アドバイスをお願いします。

  • InternetReadFileで大きいファイルが読み取れない

    InternetReadFileでウェブ上のファイルをローカルPCにコピーするプログラムが、ファイルサイズが大きくなると最後までコピーできません。具体的には1Mバイト以上のファイルの読み取りにおいて、150K~400Kバイトまでしか読み取ることができません。読み取られたバイト数(以下のプログラムでdwByteRead)が0になり、それ以降のデータを読み取れません。読み取られた総バイト数は読み取りバッファサイズ(以下のプログラムでREAD_BUF_SIZE)の整数倍ですが、その値は毎回異なります。(殆どの場合、150K~400Kバイト)dwByteReadが0なった後、10回再試行を行うルーチンを追加してみましたが、一旦0になるとそれ以降は復活することはなく効果無しでした。このプログラムは数10Kバイトまでの読み取りでは安定して動作しているので、プログラム自体の安定性は問題ないと思います。 InternetReadFileで1Mバイト以上のファイルを読み取ることに成功して方がいらっしゃいました、その方法をご教示ください。他の方法でも1Mバイト以上のファイルをhttpから取り込むことができる方法で結構です。 HINTERNET hSession = InternetOpen( "MyApp", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0 ); if( hSession ){ HINTERNET hService = InternetOpenUrl( hSession, url, NULL, 0, 0, 0 ); if( hService ){ ... if( (fp=fopen(fName.c_str(), "wb")) != NULL ){ fwrite( lpBuffer, dwBytesRead, 1, fp ); while(true){ Byte lpBuffer[READ_BUF_SIZE+1]; DWORD dwBytesRead = READ_BUF_SIZE; InternetReadFile( hService, lpBuffer, READ_BUF_SIZE, &dwBytesRead ); if( dwBytesRead == 0 ) break; fwrite( lpBuffer, dwBytesRead, 1, fp ); } ...

  • CDROMのデータ

    以前のPCからCDROMに保存した文書データを新しいPCで使おうと思ったら、空のCD ですという表示になり使えなくなりました。 CDのデータが消えてしまったんでしょうか? もう復活は無理?????

  • Virtual PC2004でWin98のインストールができない

    XPのパソコンにVirtual PC2004でWin98をインストールしようとしているのですが、 Starting Windows98... Sony 16bit ATA PC Card Driver ver1.01 (著作権表示「Cなんとか」) IObase = 180H/386H Sony16bit PC Card CD-ROM Driver Ver3.08 (著作権表示「Cなんとか」) 組み込み可能なCD-ROMデバイスが見つかりません。 デバイスドライバが見つかりません。CDROM001 有効なCD-ROMデバイスドライバが選択されていません。 システム リカバリ CD-ROM リストアユーティリティ Copyright 1998,1999,2000 Sony Corp. このプログラムは、このコンピュータ上では動作しません。 リカバリ処理を中断しました。コンピューターを再起動します。 CD-ROMを取り出してから何かキーを入力してください。 と、表示されてインストールが開始しません。何が原因なのでしょうか?自分でもいろいろ調べてみたのですが、Virtual PC2004関係はみんなすんなりできているのか、情報があまりないです。詳しい方がいらっしゃいましたら教えてください。よろしくお願いします。

  • RAWデータ

    RAWデータ(ローデータ)とはどういう考えかたで理解したらいいのでしょうかgif.TIFFとわ根本的にちがいますよね

  • RAWデータって何

    私の知る限り、一般的にはカメラの内部でJPGに圧縮してメモリーに保存していますが、 RAWデータは「生」のままで加工していないデータらしいです。 ですから、後で専用ソフトでホワイトバランスや露出等自由にすることができると云うようです。 しかし、JPGデータも、そのデータ(RAWデータ)を基としているわけでしよう。 それならば、専門家の設計で加工したJPGデータで十分と思います。 最近では、ほとんど、RAWデータも用意されている理由は何なのですか ?

  • RAWデータを…

    RAWで撮ったデータを、フォトショップで扱おうと思ったんですがデータを開けませんでした。(というか、実際にそのファイルがある所に表示されてなかったので開けませんでした) jpegだと表示されるし、開けるんですが。 カメラ(Nikon D70s)についてきた編集ソフトを使えば、ある程度補正なりが出来たのですが…。フォトショップほどいろいろいじれないようで…。 RAWデータは、写真の専門のアプリケーションでないといじれないんでしょうか? RAWで撮ったデータを、どうしてもブログにあげたかったので…苦肉の策として、付属アプリケーションの編集画面を、そのままキャプチャして切り取りましたが…。 jpegに変換できそうにも無かったので…。 ↑きっと、かなり間違ってる方法だと思うんですが…何かいい方法はありますか?; あと、付属のものを使った限り、持っていたフォトショップ(5.0)よりいじれることが少ない気がしたのですが、こんなものなのでしょうか?それとも、別売りのアプリケーションだともっと色々いじれるのでしょうか? よろしくお願いします。

専門家に質問してみよう