約 2,912,886 件
https://w.atwiki.jp/japanesehiphop/pages/591.html
Format Title Artist Label Model Number Release Press 2LP BIG BANG THEORY Instrumental GAGLE JAZZY SPORT PRODUCTIONS JSV-012,013 2007/01/25 - 197488398_624.v1391846420.jpg Side Track Title Produce A 1 鍔迫り合い(Inst) DJ MITSU THE BEATS 2 INTERLUDE GAGLE 3 RETURN OF THE 3 MEN(Inst) DJ MITSU THE BEATS 4 屍を超えて(Inst) DJ MITSU THE BEATS B 5 BIG BANG THEORY(Inst) DJ MITSU THE BEATS 6 INTERLUDE GAGLE 7 CONSTLELLATION(Inst) DJ MITSU THE BEATS 8 OUTRO サウ・ダージ 9 祖国語前夜(Inst) DJ MITSU THE BEATS C 10 RODDYをDRIVE(Inst) RODDY RODD 11 INTERLUDE GAGLE 12 EB(Inst) DJ MITSU THE BEATS 13 糸電話(Inst) DJ MITSU THE BEATS D 14 ZONEPRESSSS(Inst) DJ MITSU THE BEATS 15 INTERLUDE GAGLE 16 一芸披露(Inst) DJ MITSU THE BEATS 17 INTERLUDE GAGLE PERTAIN CD BIG BANG THEORY(DVD付)
https://w.atwiki.jp/sampleisbest/pages/144.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 コンソール アプリケーション プロジェクト名 isprint アプリケーションの種類 コンソール アプリケーション 追加のオプション 空のプロジェクト 以下の様にApplication Compatibility Toolkit(ACT)を適用すると、isprintに変化はないが、GetStringTypeは利用できそうである。 Microsoft Application Compatibility Toolkit 5.6 をインストールする。 [スタート] - [プログラム] - [Microsoft Application Compatibility Toolkit] - [Compatibility Administrator (32-bit)]メニューを選択する。 左ペインの[Custom Databases] - [New Database(1)[Untitled_1]]を選択する。 メニューの[Edit] - [Rename]を選択し、データベース名を付ける。(例:isprint) メニューの[Database] - [Create New] - [Application Fix]を選択する。 [Create new Application Fix]ダイアログが表示される。 適用するプログラムファイルについて各項目を記入し、[Browse]ボタンを押して、ファイルを選択後、[次へ]ボタンを押す。 [Compatibility Modes]は何もせず、[次へ]ボタンを押す。 [Compatibility Fixes]から[EmulateGetStringType]にチェックを付け、[次へ]ボタンを押す。 [完了]ボタンを押す。 作成したデータベース(isprint)を選択する。 メニューの[File] - [Save]を選択し、ファイル名を付けて保存する。(例:isprint.sdb) 参考 Windowsの互換性テクノロジの仕組み(後編) - @IT isprint 関数 _ismbcprint 関数などの戻り値が以前と異なる結果を返す isprint3.c #include locale.h #include stdio.h #include Windows.h int main() { BYTE szSrcStr[] = "ビープ"; WORD wCharType[5+1]; char *psz; BYTE by; int n; psz = setlocale(LC_CTYPE, ""); printf("[%s]\n", psz); GetStringTypeA(LOCALE_SYSTEM_DEFAULT, CT_CTYPE1, (LPCSTR)szSrcStr, -1, wCharType); for (n = 0; by = szSrcStr[n]; n++) { printf("%02X %04X %c\n", by, wCharType[n], isprint(by) ? o x ); } return 0; } 実行 C \projects\vc++\isprint\Release sdbinst isprint.sdb C \projects\vc++\isprint\Release isprint [Japanese_Japan.932] CB 0100 o DE 0110 x B0 0110 x CC 0100 o DF 0110 x C \projects\vc++\isprint\Release sdbinst -u isprint.sdb C \projects\vc++\isprint\Release isprint [Japanese_Japan.932] CB 0300 o DE 0200 x B0 0200 x CC 0300 o DF 0200 x isprint回避策の一例を挙げる。 isprint4.c #include stdio.h #define CHPRINT 0x1 #define IsPrint(c) ((ChType+1)[c] CHPRINT) unsigned char ChType[256+1] = {0}; // 文字種情報の初期化 void InitChType(void) { int n; // IsPrint for (n = 0x20; n = 0x7e; n++) { ChType[n+1] |= CHPRINT; } for (n = 0xa1; n = 0xdf; n++) { ChType[n+1] |= CHPRINT; } } void PrintCodeTable(void) { int nHigh; int nLow; int nChar = 0; printf(" 0 1 2 3 4 5 6 7 8 9 A B C D E F\n"); for (nHigh = 0; nHigh 16; nHigh++) { printf("%X_", nHigh); for (nLow = 0; nLow 16; nLow++) { printf(" %c", IsPrint(nChar++) ? o . ); } printf("\n"); } } int main() { InitChType();// 文字種情報の初期化 PrintCodeTable(); return 0; } 出力 0 1 2 3 4 5 6 7 8 9 A B C D E F 0_ . . . . . . . . . . . . . . . . 1_ . . . . . . . . . . . . . . . . 2_ o o o o o o o o o o o o o o o o 3_ o o o o o o o o o o o o o o o o 4_ o o o o o o o o o o o o o o o o 5_ o o o o o o o o o o o o o o o o 6_ o o o o o o o o o o o o o o o o 7_ o o o o o o o o o o o o o o o . 8_ . . . . . . . . . . . . . . . . 9_ . . . . . . . . . . . . . . . . A_ . o o o o o o o o o o o o o o o B_ o o o o o o o o o o o o o o o o C_ o o o o o o o o o o o o o o o o D_ o o o o o o o o o o o o o o o o E_ . . . . . . . . . . . . . . . . F_ . . . . . . . . . . . . . . . .
https://w.atwiki.jp/sampleisbest/pages/284.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 TestMP3 アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト 参考 MP3 TestMP3.cpp // TestMP3_2 MP3ファイルの概要 #pragma comment(lib, "winmm") #include Windows.h #include MMReg.h #include stdio.h #include string #include "resource.h" using namespace std; typedef struct { BYTE id[3]; BYTE version[2]; BYTE flag; BYTE size[4]; } ID3V2HEADER, *LPID3V2HEADER; // 関数プロトタイプ宣言 INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnDropFiles(HWND hDlg, WPARAM wParam); void Trace(LPCTSTR format, ...); BOOL LoadMP3(LPTSTR lpszFile); BOOL GetMP3Format(LPBYTE lpData); // 外部変数 wstring str; //============================================================================== int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) { DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, DlgProc); return 0; } INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { INT_PTR result = TRUE; switch (uMsg) { case WM_COMMAND switch (LOWORD(wParam)) { case IDCANCEL EndDialog(hDlg, IDCANCEL); break; } break; case WM_DROPFILES OnDropFiles(hDlg, wParam); DragFinish((HDROP)wParam); break; case WM_CLOSE EndDialog(hDlg, 0); break; default result = FALSE; } return result; } void OnDropFiles(HWND hDlg, WPARAM wParam) { HDROP hDrop = (HDROP)wParam; TCHAR szFile[MAX_PATH]; DragQueryFile(hDrop, 0, szFile, _countof(szFile)); TCHAR title[256]; swprintf_s(title, TEXT("%s - %s"), TEXT("TestMP3"), szFile); SetWindowText(hDlg, title); str.clear(); if (!LoadMP3(szFile)) { return; } SetWindowText(GetDlgItem(hDlg, IDC_EDIT), str.c_str()); } void Trace(LPCTSTR format, ...) { va_list arg_ptr; va_start(arg_ptr, format); TCHAR buffer[256]; int size = _vsnwprintf_s(buffer, _TRUNCATE, format, arg_ptr); va_end(arg_ptr); str += buffer; str += TEXT("\r\n"); } BOOL LoadMP3(LPTSTR lpszFileName) { // MP3ファイル部 HMMIO hmmio = mmioOpen(lpszFileName, NULL, MMIO_READ); if (hmmio == NULL) { MessageBox(NULL, TEXT("ファイルのオープンに失敗しました。"), NULL, MB_ICONWARNING); return FALSE; } DWORD dwFile = mmioSeek(hmmio, 0, SEEK_END); LPBYTE lpFile = new BYTE[dwFile]; mmioSeek(hmmio, 0, SEEK_SET); mmioRead(hmmio, (HPSTR)lpFile, dwFile); mmioClose(hmmio, 0); // MP3データ部 DWORD dwData = dwFile; LPBYTE lpData = lpFile; // ID3v1 if (128 = dwFile memcmp(lpFile + dwFile - 128, "TAG", 3) == 0) { dwData -= 128; Trace(TEXT("ID3v1 o")); } else { Trace(TEXT("ID3v1 x")); } // ID3v2 if (10 = dwData memcmp(lpFile, "ID3", 3) == 0) { LPID3V2HEADER lpHeader = (LPID3V2HEADER)lpFile; LPBYTE size = lpHeader- size; DWORD dwTagSize = ((size[0] 21)|(size[1] 14)|(size[2] 7)|size[3]) + 10; dwData -= dwTagSize; lpData = lpFile + dwTagSize; Trace(TEXT("ID3v2 o")); Trace(TEXT("Version %u"), lpHeader- version[0]); Trace(TEXT("Size %u %#x"), dwTagSize, dwTagSize); } else { Trace(TEXT("ID3v2 x")); } GetMP3Format(lpData); delete[] lpFile; return TRUE; } BOOL GetMP3Format(LPBYTE lpData) { static const DWORD dwBitTableLayer3[][16] = { {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 0}, {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0} }; static const DWORD dwSampleTable[][3] = { {44100, 48000, 32000}, {22050, 24000, 16000} }; // 同期ヘッダ if (lpData[0] != 0xff || lpData[1] 5 != 0x07) { return FALSE; } // バージョン BYTE version; switch (lpData[1] 3 0x03) { case 3 // 11=MPEG1 version = 1; break; case 2 // 10=MPEG2 version = 2; break; default return FALSE; } // レイヤー if ((lpData[1] 1 0x03) != 1) {// 01=Leyer3 return FALSE; } // ビットレート BYTE index = lpData[2] 4; DWORD dwBitRate = dwBitTableLayer3[version - 1][index]; // サンプリングレート index = lpData[2] 2 0x03; DWORD dwSampleRate = dwSampleTable[version - 1][index]; // パディング BYTE padding = lpData[2] 1 0x01; // チャンネルモード BYTE channel = (lpData[3] 6) == 3 ? 1 2;// 11=シングルチャネル Trace(TEXT("----")); Trace(TEXT("Version MPEG%u"), version); Trace(TEXT("Layer 3")); Trace(TEXT("Bit Rate %u kbps"), dwBitRate); Trace(TEXT("Sampling Rate %u Hz"), dwSampleRate); Trace(TEXT("Channels %u"), channel); return TRUE; } resource.h #define IDD_DIALOG100 #define IDC_EDIT1000 TestMP3.rc // resource script #include Windows.h #include "resource.h" IDD_DIALOG DIALOGEX 100, 100, 320, 200 STYLE WS_POPUPWINDOW | WS_MINIMIZEBOX EXSTYLE WS_EX_APPWINDOW | WS_EX_ACCEPTFILES CAPTION "TestMP3" FONT 9, "MS Pゴシック" BEGIN EDITTEXTIDC_EDIT,10,10,300,150,ES_MULTILINE END
https://w.atwiki.jp/sampleisbest/pages/47.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 コンソール アプリケーション プロジェクト名 files2 アプリケーションの種類 コンソール アプリケーション 追加のオプション 空のプロジェクト 文字セット Unicode files2.c #include fcntl.h // _O_WTEXT #include io.h // _setmode #include stdio.h // _fileno #include stdlib.h #include tchar.h int files(const _TCHAR *ptcDir); int _tmain() { _TCHAR atcDir[_MAX_PATH]; size_t size; // BOMなしUTF-16LE _setmode(_fileno(stdout), _O_WTEXT); _setmode(_fileno(stderr), _O_WTEXT); _tgetcwd(atcDir, _countof(atcDir)); size = _tcslen(atcDir); if (0 size atcDir[size - 1] != _T( \\ )) { _tcscat_s(atcDir, _countof(atcDir), _T("\\")); } files(atcDir); return 0; } int files(const _TCHAR *ptcDir) { struct _wfinddata_t fi;// fileinfo _TCHAR atcPath[_MAX_PATH]; intptr_t handle; size_t sizeDir; sizeDir = _tcslen(ptcDir); if (_MAX_PATH = sizeDir + 4) { _ftprintf(stderr, _T("error パスが長過ぎます。%d[%s]\n"), sizeDir, ptcDir); return -1; } _stprintf_s(atcPath, _countof(atcPath), _T("%s*.*"), ptcDir); handle = _tfindfirst(atcPath, fi); if (handle == -1) { _ftprintf(stderr, _T("error _tfindfirst[%s]\n"), ptcDir); return -1; } do { if (fi.attrib _A_SUBDIR) { if (!_tcscmp(fi.name, _T(".")) || !_tcscmp(fi.name, _T(".."))) { continue; } if (_MAX_PATH = sizeDir + _tcslen(fi.name) + 1) { _ftprintf(stderr, _T("error パスが長過ぎます。[%s][%s]\n"), ptcDir, fi.name); continue; } _stprintf_s(atcPath, _countof(atcPath), _T("%s%s\\"), ptcDir, fi.name); files(atcPath); } else { _tprintf(_T("%10u %s%s\n"), fi.size, ptcDir, fi.name); } } while (_tfindnext(handle, fi) == 0); _findclose(handle); return 0; }
https://w.atwiki.jp/2ch_big/pages/36.html
メニュー オンライン、リアルタイムにtoto投票状況を自分で取り込んで判定できます(副産物として表ができる) 100円BIG@wikiを検索 http //www65.atwiki.jp/hyakuenbig/ に行く 必要に応じて、左下にある転置までスクロール 転置をクリック メニューからtoto投票状況(支持)を選択 第 回toto投票状況をクリック ホーム90分負け 2 から※5分毎まで選択 クリップボードにコピー ウェブブラウザの戻るボタンを押す 入力欄の左上に貼り付ける いま貼り付けた※5分毎より右にある文字列を右下まで選択して切り取る [支持]ボタンを押す。下に表が出力される 出力された表を選択する クリップボードにコピー メニューから判定を選択 入力欄の左上に貼り付ける いま貼り付けた表より下にある表を選択して切り取る [設定]ボタンを押す。[設定]ボタンの右にメッセージが表示される(注1) ボタンの下にある入力欄に14桁の数列を入力 [判定]ボタンを押す。 [判定]ボタンの下に出力された数列を選択 クリップボードにコピー スレに貼り付ける (注1) [設定]ボタンを押したら[判定]ボタンを押してくださいというメッセージが表示されます。これにより、設定されたことを確認してください。 (注2) クリップボードは、最初から、どのWindowsにも、はいっています。 CtrlをおしながらVをおせば、現在の内容をはりつけることができます。Ctrl + Vのように表記します。 マウスを右クリックしてメニューから貼り付けを選択してもできます。 BIG判定お願いスレ 21
https://w.atwiki.jp/clanguage/pages/13.html
人気商品一覧 @wikiのwikiモードでは #price_list(カテゴリ名) と入力することで、あるカテゴリの売れ筋商品のリストを表示することができます。 カテゴリには以下のキーワードがご利用できます。 キーワード 表示される内容 ps3 PlayStation3 ps2 PlayStation3 psp PSP wii Wii xbox XBOX nds Nintendo DS desctop-pc デスクトップパソコン note-pc ノートパソコン mp3player デジタルオーディオプレイヤー kaden 家電 aircon エアコン camera カメラ game-toy ゲーム・おもちゃ全般 all 指定無し 空白の場合はランダムな商品が表示されます。 ※このプラグインは価格比較サイト@PRICEのデータを利用しています。 たとえば、 #price_list(game-toy) と入力すると以下のように表示されます。 ゲーム・おもちゃ全般の売れ筋商品 #price_list ノートパソコンの売れ筋商品 #price_list 人気商品リスト #price_list
https://w.atwiki.jp/thesimssocial/pages/33.html
○○を行う。はNeighbor宅でも可能な事が多いです 報酬-絵画(使用不可) part1 part2 part3 part4 part5 part6 part7 part 1 イスかチェアーでDaydreamを3個取得(Energy消費) [[Love]]を5個所持 本棚でMatchmakingを5回行う Part2 棺型のベッドを所持(1750Simoleons) TreeにSandpaperを3回行う(同じ木の連続指定は不可) 冷蔵庫でRemove Garlicを行う(1台で1回・Neighbor可) part3 RemoveSilverを行いSilverを7個集める(Neighbor可・複数オブジェクト対象) 冷蔵庫でStock With Foodを行う(Neighbor可) ベッドやソファーからノミを5回とる(Neighbor可・ベッド1個で1回) Part4 [[Herbs]]を5個所持 Silver Bulletを入手(ウォールに投稿) 3回電話でWarn About Jacobを実行(Neighbor宅可) Part5 Stakeを4本入手(Treeから取得・1回で出る時と2回で出る時がある) ウォールに投稿 Grave yardを2個購入(Outdoor Page 9) part6 Bellaに電話をする (報酬で貰ったVampireかWerewolvesに着替えてから電話を使用) 3人にVampireについて尋ねる 3人にWerewolvesについて訪ねる part7 U-Tool WorkbenchでTrapを7回作る (Living Page 4) 作成したTrapをトイレ・ベッド・墓石に設置する(Neighbor可) [[Fear]]を3つ集める(ウォールに投稿)
https://w.atwiki.jp/mtgflavortext/pages/12505.html
imageプラグインエラー ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (Big Score.png) 「想像を絶する富?大丈夫、鮮明に想像できるわ。」 "Unimaginable riches? I assure you, I have a vivid imagination." ニューカペナの街角 ジャンプスタート2022 【M TG Wiki】 名前
https://w.atwiki.jp/sampleisbest/pages/279.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 FreqMod アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト 文字セット Unicode FreqMod.cpp // FreqMod2 FM音源での音の作り方 #pragma comment(lib, "winmm") #define _USE_MATH_DEFINES #include Windows.h #include tchar.h #include math.h #define SAFE_FREE(p)if (p) { free(p); p = NULL; } #define APP_NAMETEXT("FreqMod") #define SAMPLING_RATE44100 // LFO(Low Frequency Oscillator) 低周波発信器 // EG(Envelop Generator) struct VoiceParam { char Feedback_Algorithm;// 未使用 char OperatorMask;// 未使用 char WaveForm;// 未使用 0 ノコギリ波 char Sync;// 未使用 0 Key-onと無関係にLFOが動作 short Speed;// 未使用 LFOの速度(0 - 16383) char PitchModulationDepth;// 未使用 音程に対してLFOをかける深さ(-127 - 127) char AmplitudeModulationDepth;// 未使用 音量に対してLFOをかける深さ(-127 - 127) char PitchModulationSensitivity;// 未使用 音程に対するLFOをかける度合(0 - 15) }; struct OperatorParam { char AR;// 未使用 Attack Rate(0 - 31) char DR;// 未使用 Decay Rate(0 - 31) char SR;// 未使用 Sustain Rate(0 - 31) char RR;// 未使用 Release Rate(0 - 15) char SL;// 未使用 Sustain Level(0 - 15) char OutputLevel;// 減衰量(127 - 0) 0が最大出力 char KeyboardRateScalingDepth;// 未使用 高音になるほどEGの変化速度を速くする度合(0 - 3) char Multiple;// 周波数比(0 - 15) 0=1/2 char Detune;// 未使用 音程のずれの度合(-3 - 3) char AMS;// Amplitude Modulation Sensitivity(0 - 15) }; // 関数プロトタイプ宣言 void CmdVoice0(void); void CmdVoice1(void); double Operator(const OperatorParam op, double pitch, double mod); void Trace(LPCTSTR format, ...); LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnCreate(HWND hWnd); void OnSize(HWND hWnd, WPARAM wParam, LPARAM lParam); void OnHScroll(HWND hWnd, WPARAM wParam); void OnPaint(HWND hWnd); void OnChar(HWND hWnd, WPARAM wParam, LPARAM lParam); void Play(HWND hWnd); void OnWomOpen(void); void OnWomDone(HWND hWnd); // 音階 const int scale[] = {3, 5, 7, 8, 10, 12, 14, 15}; // 外部変数 SCROLLINFO siHorz; int sampleLength; PBYTE waveformData = NULL; HWAVEOUT hwo; WAVEHDR wh; HCURSOR hCursor = NULL; VoiceParam vp; OperatorParam op[4]; //============================================================================== int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow) { CmdVoice0(); // ウィンドウクラスの登録 WNDCLASSEX wcx; ZeroMemory( wcx, sizeof wcx); wcx.cbSize= sizeof wcx; wcx.style= CS_HREDRAW | CS_VREDRAW; wcx.lpfnWndProc= WndProc; wcx.hInstance= hInstance; wcx.hCursor= LoadCursor(NULL, IDC_ARROW); wcx.hbrBackground= HBRUSH(COLOR_WINDOW + 1); wcx.lpszClassName= APP_NAME; if (RegisterClassEx( wcx) == 0) { return 0; } // ウィンドウの作成 HWND hWnd = CreateWindow( APP_NAME, APP_NAME, WS_OVERLAPPEDWINDOW | WS_HSCROLL, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (hWnd == NULL) { return 0; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // メッセージループ MSG msg; while (GetMessage( msg, NULL, 0, 0)) { TranslateMessage( msg); DispatchMessage( msg); } SAFE_FREE(waveformData); return msg.wParam; } void CmdVoice0(void) { op[0].OutputLevel = 32; op[0].Multiple = 12; op[1].OutputLevel = 57; op[1].Multiple = 15; op[2].OutputLevel = 30; op[2].Multiple = 1; op[3].OutputLevel = 0; op[3].Multiple = 3; sampleLength = SAMPLING_RATE * 4; waveformData = (PBYTE)malloc(sampleLength); int i = 0; for (int n = 0; n 8; n++) { for (int t = 0; t SAMPLING_RATE / 2; t++) { double freq = 440.0 * pow(pow(2.0, scale[n]), 1.0/12); double pitch = fmod(freq * t / SAMPLING_RATE, 1); // Algorithm=2 double output0 = Operator(op[0], pitch, 0); double output1 = Operator(op[1], pitch, 0); double output2 = Operator(op[2], pitch, output1); double output3 = Operator(op[3], pitch, (output0 + output2) / 2); //double output3 = Operator(op[2], pitch, 0); waveformData[i++] = BYTE(128 + 64 * output3); } } } void CmdVoice1(void) { op[0].OutputLevel = 112; op[0].Multiple = 1; op[1].OutputLevel = 0; op[1].Multiple = 1; sampleLength = SAMPLING_RATE; waveformData = (PBYTE)malloc(sampleLength); for (int i = 0; i sampleLength; i++) { double pitch = fmod(440.0 * i / SAMPLING_RATE, 1); // OP.1 モジュレータ double output0 = Operator(op[0], pitch, 0); // OP.2 キャリア double output1 = Operator(op[1], pitch, output0); waveformData[i] = BYTE(128 + 64 * output1); } } // 正弦波発振器 double Operator(const OperatorParam op, double pitch, double mod) { pitch = fmod(pitch * op.Multiple, 1); double add = pitch + mod; // 加算器 double output = sin(2 * M_PI * add) * (128 - op.OutputLevel) / 128; return output; } void Trace(LPCTSTR format, ...) { va_list arg_ptr; TCHAR buffer[256]; int size; va_start(arg_ptr, format); size = _vsntprintf_s(buffer, _countof(buffer), _TRUNCATE, format, arg_ptr); va_end(arg_ptr); OutputDebugString(buffer); if (size 0) { OutputDebugString(_T("...\n")); } } //------------------------------------------------------------------------------ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case MM_WOM_OPEN OnWomOpen(); return 0; case MM_WOM_DONE OnWomDone(hWnd); return 0; case WM_PAINT OnPaint(hWnd); return 0; case WM_HSCROLL OnHScroll(hWnd, wParam); return 0; case WM_SIZE OnSize(hWnd, wParam, lParam); return 0; case WM_CHAR OnChar(hWnd, wParam, lParam); return 0; case WM_CREATE OnCreate(hWnd); return 0; case WM_DESTROY PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, uMsg, wParam, lParam); } void OnCreate(HWND hWnd) { RECT rc; GetClientRect(hWnd, rc); siHorz.cbSize= sizeof siHorz; siHorz.fMask= SIF_RANGE | SIF_PAGE | SIF_POS | SIF_DISABLENOSCROLL; siHorz.nMin= 0; siHorz.nMax= SAMPLING_RATE - 1; siHorz.nPage= rc.right; siHorz.nPos= 0; SetScrollInfo(hWnd, SB_HORZ, siHorz, FALSE); } void OnSize(HWND hWnd, WPARAM wParam, LPARAM lParam) { if (wParam == SIZE_MINIMIZED) return; siHorz.nPage= LOWORD(lParam); int nPosMax= max(siHorz.nMax - (int)siHorz.nPage + 1, 0); siHorz.nPos= min(siHorz.nPos, nPosMax); SetScrollInfo(hWnd, SB_HORZ, siHorz, TRUE); } void OnHScroll(HWND hWnd, WPARAM wParam) { int nPos = siHorz.nPos; switch (LOWORD(wParam)) { case SB_LINEUP nPos -= 10; break; case SB_LINEDOWN nPos += 10; break; case SB_PAGEUP nPos -= siHorz.nPage; break; case SB_PAGEDOWN nPos += siHorz.nPage; break; case SB_THUMBTRACK SCROLLINFO si; si.cbSize= sizeof si; si.fMask= SIF_TRACKPOS; if (GetScrollInfo(hWnd, SB_HORZ, si) != 0) { nPos = si.nTrackPos; } break; } int nPosMax = max(siHorz.nMax - (int)siHorz.nPage + 1, 0); nPos = min(nPos, nPosMax); nPos = max(nPos, 0); if (nPos == siHorz.nPos) return; ScrollWindowEx(hWnd, siHorz.nPos - nPos, 0, NULL, NULL, NULL, NULL, SW_INVALIDATE | SW_ERASE); siHorz.nPos = nPos; SetScrollInfo(hWnd, SB_HORZ, siHorz, TRUE); UpdateWindow(hWnd); } void OnPaint(HWND hWnd) { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, ps); RECT rc; GetClientRect(hWnd, rc); //Trace(_T("OnPaint %d %d\n"), ps.rcPaint.left, ps.rcPaint.right); // waveform HPEN pen = CreatePen(PS_SOLID, 0, RGB(0,0,255)); HGDIOBJ penOld = SelectObject(hdc, pen); for (int x = ps.rcPaint.left; x ps.rcPaint.right; x++) { size_t i = siHorz.nPos + x; if (SAMPLING_RATE = i) break; MoveToEx(hdc, x, rc.bottom / 2, NULL); LineTo(hdc, x, rc.bottom * (255 - waveformData[i]) / 256); } SelectObject(hdc, penOld); DeleteObject(pen); EndPaint(hWnd, ps); } void OnChar(HWND hWnd, WPARAM wParam, LPARAM lParam) { Trace(_T("OnChar %x %x\n"), wParam, lParam); switch (wParam) { case VK_ESCAPE DestroyWindow(hWnd); break; case p Play(hWnd); break; } } void Play(HWND hWnd) { if (hCursor) return; WAVEFORMATEX wf; wf.wFormatTag= WAVE_FORMAT_PCM; wf.wBitsPerSample= 8; wf.nChannels= 1; wf.nSamplesPerSec= SAMPLING_RATE; wf.nBlockAlign= (wf.wBitsPerSample / 8) * wf.nChannels; wf.nAvgBytesPerSec= wf.nSamplesPerSec * wf.nBlockAlign; wf.cbSize= 0; MMRESULT mmr = waveOutOpen( hwo, WAVE_MAPPER, wf, (DWORD_PTR)hWnd, 0, CALLBACK_WINDOW); if (mmr != MMSYSERR_NOERROR) { Trace(_T("waveOutOpen\n")); return; } HCURSOR hWait = LoadCursor(NULL, IDC_WAIT); hCursor = SetCursor(hWait); SetClassLong(hWnd, GCL_HCURSOR, (LONG)hWait); } void OnWomOpen(void) { wh.lpData= (LPSTR)waveformData; wh.dwBufferLength= sampleLength; wh.dwBytesRecorded= 0; wh.dwUser= 0; wh.dwFlags= 0; wh.dwLoops= 0; wh.lpNext= NULL; wh.reserved= 0; MMRESULT mmr = waveOutPrepareHeader(hwo, wh, sizeof wh); if (mmr != MMSYSERR_NOERROR) { Trace(_T("waveOutPrepareHeader\n")); return; } wh.dwFlags|= WHDR_BEGINLOOP | WHDR_ENDLOOP; wh.dwLoops= 1; mmr = waveOutWrite(hwo, wh, sizeof wh); if (mmr != MMSYSERR_NOERROR) { Trace(_T("waveOutWrite\n")); } } void OnWomDone(HWND hWnd) { Trace(_T("OnWomDone\n")); waveOutReset(hwo); waveOutUnprepareHeader(hwo, wh, sizeof wh); waveOutClose(hwo); SetCursor(hCursor); SetClassLong(hWnd, GCL_HCURSOR, (LONG)hCursor); hCursor = NULL; }
https://w.atwiki.jp/sampleisbest/pages/301.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 Fourier2 アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト 文字セット Unicode Fourier2.cpp #define _USE_MATH_DEFINES #include Windows.h #include tchar.h #include math.h #define APP_NAME TEXT("Fourier2") #define SAMPLENUM 2048// サンプル数 // 関数プロトタイプ宣言 void Trace(LPCTSTR format, ...); LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnCreate(); void OnPaint(HWND hWnd); void DrawLine(HDC hdc, RECT rc, short* wf, COLORREF color); // 外部変数 short wfs[SAMPLENUM];// 波形:waveform source short wfd[SAMPLENUM];// 波形:waveform destination //============================================================================== int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow) { // ウィンドウクラスの登録 WNDCLASSEX wcx; ZeroMemory( wcx, sizeof wcx); wcx.cbSize= sizeof wcx; wcx.style= CS_HREDRAW | CS_VREDRAW; wcx.lpfnWndProc= WndProc; wcx.hInstance= hInstance; wcx.hCursor= LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)); wcx.hbrBackground= HBRUSH(COLOR_WINDOW + 1); wcx.lpszClassName= APP_NAME; if (RegisterClassEx( wcx) == 0) { return 0; } // ウィンドウの作成 HWND hWnd = CreateWindow( APP_NAME, APP_NAME, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (hWnd == NULL) { return 0; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // メッセージループ MSG msg; while (GetMessage( msg, NULL, 0, 0)) { TranslateMessage( msg); DispatchMessage( msg); } return msg.wParam; } void Trace(LPCTSTR format, ...) { va_list argptr; TCHAR buffer[256]; va_start(argptr, format); int size = _vsntprintf_s(buffer, _TRUNCATE, format, argptr); va_end(argptr); OutputDebugString(buffer); if (size 0) { OutputDebugString(_T("...\n")); } } //------------------------------------------------------------------------------ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CREATE OnCreate(); return 0; case WM_PAINT OnPaint(hWnd); return 0; case WM_DESTROY PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, uMsg, wParam, lParam); } void OnCreate() { double y[SAMPLENUM]; Trace(L"OnCreate\n"); // 波形の生成 for (int n = 0; n SAMPLENUM; n++) { wfs[n] = (n (SAMPLENUM / 2)) ? 16384 -16384; //wfs[n] = short(sin(2 * M_PI * n / SAMPLENUM) * 16384); //wfs[n] = (sin(n * 2 * M_PI * 172.265625 / 44100) 0) ? 16384 -16384; //wfs[n] = short(sin(n * 2 * M_PI * 172.265625 / 44100) * 16384); } // a0 double sum = 0; for (int x = 0; x SAMPLENUM; x++) { sum += wfs[x]; } double a0 = sum * (2 * M_PI / SAMPLENUM) / (2 * M_PI); Trace(L"a0=%f\n", a0); for (int x = 0; x SAMPLENUM; x++) { y[x] = a0; } // an, bn for (int n = 1; n = 11; n++) { double an = 0; double bn = 0; for (int x = 0; x SAMPLENUM; x++) { double t = (2.0 * x / SAMPLENUM - 1) * M_PI; an += wfs[x] * cos(n * t); bn += wfs[x] * sin(n * t); } an = an * (2 * M_PI / SAMPLENUM) / M_PI; bn = bn * (2 * M_PI / SAMPLENUM) / M_PI; Trace(L"n=%d an=%f bn=%f\n", n, an, bn); for (int x = 0; x SAMPLENUM; x++) { double t = (2.0 * x / SAMPLENUM - 1) * M_PI; y[x] += an * cos(n * t) + bn * sin(n * t); } } // 合成波形 for (int x = 0; x SAMPLENUM; x++) { wfd[x] = short(y[x]); //Trace(L"y[%d]=%f\n", x, y[x]); } } void OnPaint(HWND hWnd) { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, ps); Trace(L"OnPaint(%d, %d, %d, %d)\n", ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.right, ps.rcPaint.bottom); RECT rc; GetClientRect(hWnd, rc); DrawLine(hdc, rc, wfs, RGB(0, 0, 255)); DrawLine(hdc, rc, wfd, RGB(255, 0, 0)); EndPaint(hWnd, ps); } void DrawLine(HDC hdc, RECT rc, short* wf, COLORREF color) { HPEN pen = CreatePen(PS_SOLID, 0, color); HGDIOBJ penOld = SelectObject(hdc, pen); MoveToEx(hdc, 0, rc.bottom * (32768 - wf[0]) / 65536, NULL); for (int x = 1; x SAMPLENUM; x++) { LineTo(hdc, rc.right * x / SAMPLENUM, rc.bottom * (32768 - wf[x]) / 65536); } SelectObject(hdc, penOld); DeleteObject(pen); }