約 4,339,908 件
https://w.atwiki.jp/v-lyrics/pages/526.html
Slight Light [ TAG Alp-S E-Q Sekka Yuhu title zddnP] Music zddnP/zddnP Lyric zddnP/zddnP Arrange zddnP/zddnP Vocal Sekka Yuhu Videos PVs ■ Show/Hide Video http //www.nicovideo.jp/watch/sm9631664 http //www.nicovideo.jp/watch/sm9631664 Translations ■ Show/Hide Romaji mae daka ushiro daka itsushika wakarana ku natte ashi wo dasenaku nari mashita miwatasu kagiri ga masshiro ni nuritsubusareta mitai desu ii toka warui toka itsushika wakarana ku natte imi wo motenaku nari mashita miidasu koto ni mo tsukare ta shizukani sameta keshiki wo nurinaosu you na iro wa mada mitsukarazu ni wasurekaketeru melody wo kaze ni nosete kuchizusamu mienai tookukara itsushika wasurete shimatta togire togire no melody no tsuduki no hibikiga kikoeru shizukani sameta keshikiwo nurinaosu you ni iro wa awaku yawaraka ni ushinai kaketeta rinkaku wo terashi dasu akari ni naru shizukani sameta keshikiwo nurinaosu you ni iro wa awaku yawaraka ni wasurekaketeita melody wo kaze ni nosete kuchizusamu 2010-07-14 Checked by soundares [部分編集] ■ Show/Hide Translation SlightLight 2010-07-14 First Entry 2010-07-15 14 24 55 (Thu) Last update Trasnlated by soundares Title Slight Light Lyric Is it forward or is it backward; 前だか後ろだか At some point in time, I could no longer tell and いつしか分からなくなって I could not set my feet out anymore 足を出せなくなりました It was as if as far as I see across has been painted out purely white 見渡す限りが真っ白に塗りつぶされたみたいです --- "It s good", "It s bad" and all; 良いとか悪いとか At some point in time, I could no longer tell and いつしか分からなくなって it did not posses a meaning anymore 意味を持てなくなりました I am tired of picking it(meaning) up too 見出す事にも 疲れた --- A sight which had quietly turned cold... the color which can repaint it over 静かに冷めた景色を 塗り直すような色は still was not found and... a melody which I am starting to forget... まだ 見つからずに 忘れかけているメロディを I hum it over a wind 風に乗せて口ずさむ --- From a distance where I cannot see... (a melody which I had forgotten some time along the way)... 見えない遠くから いつしか忘れてしまった (a melody which was broken)... (the sequel sound of it)... (I can hear it sound) 途切れ途切れのメロディの 続きの響きが 聞こえる (From a distant where I cannot see, I can hear a broken melody s sequel sound that I had forgotten some time along) --- A sight which had slighty turned cold... As if repainting it over, 微かに冷めた景色を 塗り直すように a color will, faintly and softly, become a light which will illuminate a profile which it was starting to lose 色は淡くやわらかに 失いかけてた輪郭を 照らし出す明かりになる --- A sight which had quietly turned cold... As if repainting it over, 静かに冷めた景色を 塗り直すように a color will, faintly and softly, hum the melody I had been starting to forget over a wind 色は淡くやわらかに 忘れかけていたメロディを 風に乗せて口ずさむ Comment If you have any advise or opinion for this post please write here.この投稿に対して助言、ご意見などありましたらこちらに書き込んで下さい。 Name Comment すべてのコメントを見る Last modified 2010-07-15 14 24 55 (Thu) Original Lyric, Nicosound MP3, etc http //www.nicovideo.jp/watch/sm9631664 Sub video, PV, other fan made video in YouTube [Add] http //www.youtube.com/watch/xxxxxxxxx ADD LINK すべてのコメントを見る (Information in this page is based on @Wiki) _
https://w.atwiki.jp/bmd_intensity/pages/26.html
//----------------------------------------------------------------------------- // $Id DecklinkCaptureDlg.cpp,v 1.9 2006/04/11 01 11 07 ivanr Exp $ // // Desc DirectShow capture sample // // Copyright (c) Blackmagic Design 2005. All rights reserved. //----------------------------------------------------------------------------- #include "stdafx.h" #include "DecklinkCapture.h" #include "DecklinkCaptureDlg.h" #include initguid.h // TODO move this to a lib #include "DecklinkSample_uuids.h" #undef lstrlenW #ifdef _DEBUG #define new DEBUG_NEW #endif #define WM_GRAPHNOTIFYWM_APP+1// for Filter Graph event notification //----------------------------------------------------------------------------- // CAboutDlg //----------------------------------------------------------------------------- // CAboutDlg dialog used for App About class CAboutDlg public CDialog { public CAboutDlg(); // Dialog Data enum { IDD = IDD_ABOUTBOX }; protected virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation protected DECLARE_MESSAGE_MAP() }; CAboutDlg CAboutDlg() CDialog(CAboutDlg IDD) { } void CAboutDlg DoDataExchange(CDataExchange* pDX) { CDialog DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() //----------------------------------------------------------------------------- // CDecklinkCaptureDlg dialog //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Constructor // CDecklinkCaptureDlg CDecklinkCaptureDlg(CWnd* pParent /*=NULL*/) CDialog(CDecklinkCaptureDlg IDD, pParent) , m_pIVW(NULL) { m_hIcon = AfxGetApp()- LoadIcon(IDR_MAINFRAME); } //----------------------------------------------------------------------------- // DoDataExchange // void CDecklinkCaptureDlg DoDataExchange(CDataExchange* pDX) { CDialog DoDataExchange(pDX); DDX_Control(pDX, IDC_COMBO_VIDEOFORMATS, m_videoFormatCtrl); DDX_Control(pDX, IDC_COMBO_AUDIOFORMATS, m_audioFormatCtrl); DDX_Control(pDX, IDC_STATIC_PREVIEW, m_preview); DDX_Control(pDX, IDC_EDIT_CAPTUREFILE, m_captureFileCtrl); DDX_Control(pDX, IDC_COMBO_COMPRESSION, m_compressionCtrl); DDX_Control(pDX, IDC_COMBO_VIDEODEVICE, m_videoDeviceCtrl); DDX_Control(pDX, IDC_COMBO_AUDIODEVICE, m_audioDeviceCtrl); } BEGIN_MESSAGE_MAP(CDecklinkCaptureDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_CBN_SELCHANGE(IDC_COMBO_VIDEOFORMATS, OnCbnSelchangeComboVideoformats) ON_CBN_SELCHANGE(IDC_COMBO_AUDIOFORMATS, OnCbnSelchangeComboAudioformats) ON_BN_CLICKED(IDC_CHECK_AUDIOMUTE, OnBnClickedCheckAudiomute) ON_BN_CLICKED(IDC_BUTTON_BROWSE, OnBnClickedButtonBrowse) ON_BN_CLICKED(IDC_BUTTON_CAPTURE, OnBnClickedButtonCapture) ON_BN_CLICKED(IDC_BUTTON_STOP, OnBnClickedButtonStop) ON_CBN_SELCHANGE(IDC_COMBO_COMPRESSION, OnCbnSelchangeComboCompression) ON_CBN_SELCHANGE(IDC_COMBO_VIDEODEVICE, OnCbnSelchangeComboVideodevice) ON_CBN_SELCHANGE(IDC_COMBO_AUDIODEVICE, OnCbnSelchangeComboAudiodevice) END_MESSAGE_MAP() //----------------------------------------------------------------------------- // CDecklinkCaptureDlg message handlers //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // OnInitDialog // Called before the dialog is displayed, use this message handler to initialise // our app BOOL CDecklinkCaptureDlg OnInitDialog() { CDialog OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu- AppendMenu(MF_SEPARATOR); pSysMenu- AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application s main window is not a dialog SetIcon(m_hIcon, TRUE);// Set big icon SetIcon(m_hIcon, FALSE);// Set small icon // create a basic capture graph and preview the incoming video m_pGraph = NULL; m_pVideoCapture = NULL; m_pAudioCapture = NULL; m_pVideoRenderer = NULL; m_pSmartT = NULL; m_pControl = NULL; m_pIVW = NULL; m_pMediaEvent = NULL; m_ROTRegister = 0; m_bAudioMute = FALSE; m_compressor = 0; m_bEnableCompressionCtrl = TRUE; m_captureFile = " Select File "; // initialise default video media type ZeroMemory( m_vihDefault, sizeof(m_vihDefault)); m_vihDefault.AvgTimePerFrame = 333667; m_vihDefault.bmiHeader.biWidth = 720; m_vihDefault.bmiHeader.biHeight = 486; m_vihDefault.bmiHeader.biBitCount = 16; m_vihDefault.bmiHeader.biCompression = YVYU ; // initialise default audio media type ZeroMemory( m_wfexDefault, sizeof(m_wfexDefault)); m_wfexDefault.nChannels = 2;// the only field of interest // retrieve last state QueryRegistry(); m_captureFileCtrl.SetWindowText(m_captureFile); EnableControls(); // create a preview graph // add the filters that will be used by all the graphs; preview, uncompressed capture, dv capture, // mpeg capture and windows media capture HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, reinterpret_cast void** ( m_pGraph)); if (SUCCEEDED(hr)) { #ifdef _DEBUG hr = CDSUtils AddGraphToRot(m_pGraph, m_ROTRegister); #endif hr = m_pGraph- QueryInterface(IID_IMediaControl, reinterpret_cast void** ( m_pControl)); if (SUCCEEDED(hr)) { // locate the video capture devices hr = PopulateDeviceControl( CLSID_VideoInputDeviceCategory, m_videoDeviceCtrl); if (SUCCEEDED(hr)) { hr = PopulateDeviceControl( CLSID_AudioInputDeviceCategory, m_audioDeviceCtrl); if (SUCCEEDED(hr)) { PWSTR pVideoName = (PWSTR)m_videoDeviceCtrl.GetItemData(m_videoDeviceCtrl.SetCurSel(0)); PWSTR pAudioName = (PWSTR)m_audioDeviceCtrl.GetItemData(m_audioDeviceCtrl.SetCurSel(0)); if (pVideoName pAudioName) { hr = CDSUtils AddFilter2(m_pGraph, CLSID_VideoInputDeviceCategory, pVideoName, m_pVideoCapture); if (SUCCEEDED(hr)) { hr = CDSUtils AddFilter2(m_pGraph, CLSID_AudioInputDeviceCategory, pAudioName, m_pAudioCapture); if (SUCCEEDED(hr)) { PopulateVideoControl();// populate the video format control with the video formats of the currently selected device PopulateAudioControl();// populate the audio format control with the audio formats of the currently selected device PopulateCompressionControl(); // locate video screen renderer for the preview window hr = CDSUtils AddFilter(m_pGraph, CLSID_VideoRendererDefault, L"Video Renderer", m_pVideoRenderer); if (SUCCEEDED(hr)) { hr = CreatePreviewGraph(); } } } } } } } } return TRUE; // return TRUE unless you set the focus to a control } //----------------------------------------------------------------------------- // DestroyWindow // Called when the window is being destroyed, clean up and free all resources. BOOL CDecklinkCaptureDlg DestroyWindow() { m_regUtils.Close(); #ifdef _DEBUG CDSUtils RemoveGraphFromRot(m_ROTRegister); #endif DestroyGraph(); SAFE_RELEASE(m_pControl); // Hide Video Window and remove owner. This has to be done prior to // destroying any window that displays video/still. if (m_pIVW) { m_pIVW- put_Visible(OAFALSE); m_pIVW- put_Owner(NULL); } SAFE_RELEASE(m_pIVW); SAFE_RELEASE(m_pMediaEvent); SAFE_RELEASE(m_pVideoRenderer); SAFE_RELEASE(m_pAudioCapture); SAFE_RELEASE(m_pVideoCapture); SAFE_RELEASE(m_pGraph); // free mediatypes attached to format controls int count = m_videoFormatCtrl.GetCount(); for (int item=0; item count; ++item) { DeleteMediaType((AM_MEDIA_TYPE*)m_videoFormatCtrl.GetItemData(item)); } count = m_audioFormatCtrl.GetCount(); for (int item=0; item count; ++item) { DeleteMediaType((AM_MEDIA_TYPE*)m_audioFormatCtrl.GetItemData(item)); } // release the device names attached to the item s data count = m_videoDeviceCtrl.GetCount(); for (item=0; item count; ++item) { PWSTR pName = (PWSTR)m_videoDeviceCtrl.GetItemData(item); delete [] pName; } count = m_audioDeviceCtrl.GetCount(); for (item=0; item count; ++item) { PWSTR pName = (PWSTR)m_audioDeviceCtrl.GetItemData(item); delete [] pName; } return CDialog DestroyWindow(); } //----------------------------------------------------------------------------- // OnSysCommand // void CDecklinkCaptureDlg OnSysCommand(UINT nID, LPARAM lParam) { if ((nID 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog OnSysCommand(nID, lParam); } } //----------------------------------------------------------------------------- // OnPaint // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CDecklinkCaptureDlg OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, reinterpret_cast WPARAM (dc.GetSafeHdc()), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect( rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog OnPaint(); } } //----------------------------------------------------------------------------- // HandleGraphEvent // At the moment we just read the event, discard it and release memory used to store it. void CDecklinkCaptureDlg HandleGraphEvent(void) { LONG lEventCode, lEventParam1, lEventParam2; if (!m_pMediaEvent) { return; } while (SUCCEEDED(m_pMediaEvent- GetEvent( lEventCode, reinterpret_cast LONG_PTR * ( lEventParam1), reinterpret_cast LONG_PTR * ( lEventParam2), 0))) { // just free memory associated with event m_pMediaEvent- FreeEventParams(lEventCode, lEventParam1, lEventParam2); } } //----------------------------------------------------------------------------- // WindowProc // Have to add our own message handling loop to handle events from the preview video // window and to pass Window events onto it - this is so it redraws itself correctly etc. LRESULT CDecklinkCaptureDlg WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_GRAPHNOTIFY HandleGraphEvent(); break; } // Pass all msgs to video window. vid window exists as child of static // picture frame. This ensures video window redraws itself etc. if (m_pIVW) { m_pIVW- NotifyOwnerMessage(reinterpret_cast LONG_PTR (m_hWnd) /* from me */, message, wParam, lParam); } return CDialog WindowProc(message, wParam, lParam); } //----------------------------------------------------------------------------- // OnQueryDragIcon // The system calls this function to obtain the cursor to display while the user drags // the minimized window. HCURSOR CDecklinkCaptureDlg OnQueryDragIcon() { return static_cast HCURSOR (m_hIcon); } //----------------------------------------------------------------------------- // CreatePreviewGraph // Create a graph to preview the input // NOTE There are many ways of building graphs, you could opt for the ICaptureGraphBuilder interface which would // make things are lot simpler, however it doesn t always build the most efficient graphs. HRESULT CDecklinkCaptureDlg CreatePreviewGraph() { HRESULT hr = S_OK; if (m_pGraph) { // locate smart-T // NOTE The smart-T appears to hold references to its upstream connections even when its input pin // is diconnected. The smart-T has to be removed from the graph in order to clear these references which // is why the filter is enumerated and added every time the preview graph is built and removed whenever // it is destroyed. ASSERT(NULL == m_pSmartT); hr = CDSUtils AddFilter(m_pGraph, CLSID_SmartTee, L"Smart Tee", m_pSmartT); if (SUCCEEDED(hr)) { // DV preview is slightly different to all other previews if (ENC_DV != m_compressionCtrl.GetItemData(m_compressionCtrl.GetCurSel())) { // uncompressed, mpeg and wm preview // create the following // // Decklink Video Capture - Smart-T - AVI Decompressor - Video Renderer // Decklink Audio Capture - Default Audio Renderer // // render the preview pin on the smart-T filter // first connect the Decklink video capture pin to the smart-T hr = CDSUtils ConnectFilters(m_pGraph, m_pVideoCapture, NULL, m_pSmartT, NULL); if (SUCCEEDED(hr)) { // now connect the preview pin of the smart-T to the video renderer hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Preview", m_pVideoRenderer, NULL); } } else { // DV Preview // create the following // // Decklink Video Capture - AVI Decompressor - Smart-T - Colour Space Converter - Video Renderer // Decklink Audio Capture - Default Audio Renderer // // this is a more efficient graph than created by the ICaptureGraphBuilder2 interface // add the AVI decompressor and colour space converter filters CComPtr IBaseFilter pAVIDecompressor = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_AVIDec, L"AVI Decompressor", pAVIDecompressor); if (SUCCEEDED(hr)) { CComPtr IBaseFilter pColourSpaceConverter = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_Colour, L"Color Space Converter", pColourSpaceConverter); if (SUCCEEDED(hr)) { // conect the Decklink video capture pin to the AVI decompressor hr = CDSUtils ConnectFilters(m_pGraph, m_pVideoCapture, NULL, pAVIDecompressor, NULL); if (SUCCEEDED(hr)) { // connect AVI decompressor to the smart-T hr = CDSUtils ConnectFilters(m_pGraph, pAVIDecompressor, NULL, m_pSmartT, NULL); if (SUCCEEDED(hr)) { // connect the preview pin of the smart-T to the colour space converter hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Preview", pColourSpaceConverter, NULL); if (SUCCEEDED(hr)) { // connect the colour space converter to the video renderer hr = CDSUtils ConnectFilters(m_pGraph, pColourSpaceConverter, NULL, m_pVideoRenderer, NULL); } } } } } } } } else { hr = E_POINTER; } if (SUCCEEDED(hr)) { // the video path has been connected, initialise the preview window InitialiseVideoPreview(); // optionally connect the audio path if (FALSE == m_bAudioMute) { // connect the Decklink audio capture pin to the mux hr = CDSUtils RenderFilter(m_pGraph, m_pAudioCapture, L"Capture"); } // run the graph so that we can preview the input video if (m_pControl) { hr = m_pControl- Run(); } else { hr = E_POINTER; } } return hr; } //----------------------------------------------------------------------------- // CreateCaptureGraph // Create a graph to capture the input HRESULT CDecklinkCaptureDlg CreateCaptureGraph() { HRESULT hr = S_OK; // tack the file writer onto the preview graph if (m_pGraph m_pControl) { // stop the graph as we are about to modify it m_pControl- Stop(); // remove the default audio renderer so the Decklink audio capture filter // can be connected to the AVI mux, we will not preview audio whilst capturing CComPtr IPin pIPinOutput = NULL; hr = CDSUtils GetPin(m_pAudioCapture, L"Capture", pIPinOutput); if (SUCCEEDED(hr)) { // to disconnect both pins must be disconnected // find the pin connected to the Decklink audio capture pin CComPtr IPin pIPinConnection = NULL; hr = pIPinOutput- ConnectedTo( pIPinConnection); if (SUCCEEDED(hr)) { // disconnect the pins hr = m_pGraph- Disconnect(pIPinOutput); hr = m_pGraph- Disconnect(pIPinConnection); // get the owning filter of the downstream pin and remove it from the graph PIN_INFO pinInfo = {0}; hr = pIPinConnection- QueryPinInfo( pinInfo); if (SUCCEEDED(hr)) { if (pinInfo.pFilter) { hr = m_pGraph- RemoveFilter(pinInfo.pFilter); pinInfo.pFilter- Release(); } } } } // retrieve the capture filename m_captureFileCtrl.GetWindowText(m_captureFile); // store filename USES_CONVERSION; WCHAR captureFile[MAX_PATH]; wcsncpy(captureFile, A2W(m_captureFile), MAX_PATH); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetString("CaptureFile", reinterpret_cast const BYTE* (captureFile), sizeof(captureFile))); // decide the type of capture graph to build switch (m_compressionCtrl.GetItemData(m_compressionCtrl.GetCurSel())) { default case ENC_NONE hr = CreateUncompressedCaptureGraph(); break; case ENC_DV hr = CreateDVCaptureGraph(); break; case ENC_WM hr = CreateWMCaptureGraph(); break; } if (FAILED(hr)) { // there was a problem building the capture graph, issue a message // and rebuild preview graph char buffer[128]; StringCbPrintfA(buffer, sizeof(buffer), "The error 0x%08lx was detected when creating the capture graph with the following file name \r\n\r\n %s ", hr, m_captureFile); MessageBox(buffer, _T("Error"), MB_ICONERROR); OnBnClickedButtonStop();// destroy broken capture graph, build preview graph and enable controls } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // CreateUncompressedCaptureGraph // Create an optimum uncompressed capture graph HRESULT CDecklinkCaptureDlg CreateUncompressedCaptureGraph() { HRESULT hr = S_OK; // uncompressed capture // locate the AVI mux and file writer filters and add them to the graph CComPtr IBaseFilter pAVIMux = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_AviDest , L"AVI Mux", pAVIMux); if (SUCCEEDED(hr)) { CComPtr IBaseFilter pFileWriter = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_FileWriter, L"File writer", pFileWriter); if (SUCCEEDED(hr)) { // set the output filename CComQIPtr IFileSinkFilter, IID_IFileSinkFilter pIFS = pFileWriter; if (pIFS) { USES_CONVERSION;// for T2W macro hr = pIFS- SetFileName(T2W(m_captureFile), NULL); if (SUCCEEDED(hr)) { // connect the smart-T capture pin to the mux hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Capture", pAVIMux, NULL); if (SUCCEEDED(hr)) { // connect the mux to the file writer hr = CDSUtils ConnectFilters(m_pGraph, pAVIMux, NULL, pFileWriter, NULL); if (SUCCEEDED(hr)) { // video path connected now optionally connect the audio path if (FALSE == m_bAudioMute) { // connect the Decklink audio capture pin to the mux hr = CDSUtils ConnectFilters(m_pGraph, m_pAudioCapture, L"Capture", pAVIMux, NULL); } if (SUCCEEDED(hr)) { m_pControl- Run(); } } } } } } } return hr; } //----------------------------------------------------------------------------- // CreateDVCaptureGraph // Create an optimum DV capture graph // NOTE that this will only work for SD HRESULT CDecklinkCaptureDlg CreateDVCaptureGraph() { HRESULT hr = S_OK; // locate the DV encoder, AVI mux and file writer filters and add them to the graph CComPtr IBaseFilter pDVEncoder = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_DVVideoEnc, L"DV Video Encoder", pDVEncoder); if (SUCCEEDED(hr)) { CComPtr IBaseFilter pAVIMux = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_AviDest , L"AVI Mux", pAVIMux); if (SUCCEEDED(hr)) { CComPtr IBaseFilter pFileWriter = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_FileWriter, L"File writer", pFileWriter); if (SUCCEEDED(hr)) { // set the output filename CComQIPtr IFileSinkFilter, IID_IFileSinkFilter pIFS = pFileWriter; if (pIFS) { USES_CONVERSION;// for T2W macro hr = pIFS- SetFileName(T2W(m_captureFile), NULL); if (SUCCEEDED(hr)) { // configure the DV encoder CComQIPtr IDVEnc, IID_IDVEnc pIDV = pDVEncoder; if (pIDV) { // located a DV compression filter, set the format int videoFormat, dvFormat, resolution; hr = pIDV- get_IFormatResolution( videoFormat, dvFormat, resolution, FALSE, NULL); if (SUCCEEDED(hr)) { ASSERT(DVENCODERFORMAT_DVSD == dvFormat); ASSERT(DVENCODERRESOLUTION_720x480 == resolution); if ((DVENCODERVIDEOFORMAT_NTSC == videoFormat) (576 == m_vihDefault.bmiHeader.biHeight)) { // set the encoder to PAL if its NTSC videoFormat = DVENCODERVIDEOFORMAT_PAL; hr = pIDV- put_IFormatResolution(videoFormat, dvFormat, resolution, FALSE, NULL); } else if ((DVENCODERVIDEOFORMAT_PAL == videoFormat) (486 == m_vihDefault.bmiHeader.biHeight)) { // set the encoder to NTSC if its PAL videoFormat = DVENCODERVIDEOFORMAT_NTSC; hr = pIDV- put_IFormatResolution(videoFormat, dvFormat, resolution, FALSE, NULL); } } } if (SUCCEEDED(hr)) { // if the format is PAL, insert the Decklink field swap filter, PAL DV is the opposite // field order to PAL SD if (576 == m_vihDefault.bmiHeader.biHeight) { CComPtr IBaseFilter pPALFieldSwap = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_DecklinkFieldSwap, L"Decklink PAL Field Swap", pPALFieldSwap); if (SUCCEEDED(hr)) { // connect the smart-T capture pin to the PAL field swap filter hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Capture", pPALFieldSwap, NULL); if (SUCCEEDED(hr)) { // connect the field swap filter to the DV encoder hr = CDSUtils ConnectFilters(m_pGraph, pPALFieldSwap, NULL, pDVEncoder, NULL); } } } else { // connect the smart-T capture pin to the DV Encoder hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Capture", pDVEncoder, NULL); } if (SUCCEEDED(hr)) { // connect the DV encoder output to the AVI mux hr = CDSUtils ConnectFilters(m_pGraph, pDVEncoder, NULL, pAVIMux, NULL); if (SUCCEEDED(hr)) { // connect the mux to the file writer hr = CDSUtils ConnectFilters(m_pGraph, pAVIMux, NULL, pFileWriter, NULL); if (SUCCEEDED(hr)) { // video path connected now optionally connect the audio path if (FALSE == m_bAudioMute) { // connect the Decklink audio capture pin to the mux hr = CDSUtils ConnectFilters(m_pGraph, m_pAudioCapture, L"Capture", pAVIMux, NULL); } if (SUCCEEDED(hr)) { m_pControl- Run(); } } } } } } } } } } return hr; } //----------------------------------------------------------------------------- // CreateWMCaptureGraph // Create an optimum Windows Media capture graph HRESULT CDecklinkCaptureDlg CreateWMCaptureGraph() { HRESULT hr = S_OK; // locate the asf writer filter and add it to the graph CComPtr IBaseFilter pASFWriter = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_WMAsfWriter, L"WM ASF Writer", pASFWriter); if (SUCCEEDED(hr)) { // set the output filename CComQIPtr IFileSinkFilter, IID_IFileSinkFilter pIFS = pASFWriter; if (pIFS) { USES_CONVERSION;// for T2W macro hr = pIFS- SetFileName(T2W(m_captureFile), NULL); if (SUCCEEDED(hr)) { hr = ConfigureWMEncoder(pASFWriter); } } if (SUCCEEDED(hr)) { if (FALSE == m_bAudioMute) { // connect the Decklink audio capture pin to the ASF writer hr = CDSUtils ConnectFilters(m_pGraph, m_pAudioCapture, pASFWriter, MEDIATYPE_Audio); } if (SUCCEEDED(hr)) { // connect the smart-T capture pin to the ASF writer hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, pASFWriter, MEDIATYPE_Video); if (SUCCEEDED(hr)) { m_pControl- Run(); } } } } return hr; } //----------------------------------------------------------------------------- // ConfigureWMEncoder // Configure the Windows Media encoder HRESULT CDecklinkCaptureDlg ConfigureWMEncoder(IBaseFilter* pASFWriter) { HRESULT hr = S_OK; // modify the video output resolution of a system profile if (pASFWriter) { // simple system profile encoding CComQIPtr IConfigAsfWriter, IID_IConfigAsfWriter pICW = pASFWriter; if (pICW) { //NOTE You could just use the following for a default system profile //hr = pICW- ConfigureFilterUsingProfileGuid(WMProfile_XXX);// RE wmsysprf.h //NOTE If you want video only capture you must modify the profile to remove the audio // otherwise encoding will fail // Load a system profile and modify the resolution of the video output // NOTE The scope of the encoding is enormous, this just demonstrates how to change // the output video resolution from 320x240 to something larger. // Changing the resolution affects coding performance, it is likely that the encoder will // start to drop frames after a while. Using WM9 codecs will probably improve performance // and that has been left to the reader... ;o) // // get a profile manager CComPtr IWMProfileManager pIWMProfileManager = NULL; hr = WMCreateProfileManager( pIWMProfileManager); if (SUCCEEDED(hr)) { // load a system profile to modify CComPtr IWMProfile pIWMProfile = NULL; // NOTE Any WMProfile_XXX could be used here, or create a custom profile from scratch hr = pIWMProfileManager- LoadProfileByID(WMProfile_V80_FAIRVBRVideo, pIWMProfile); if (SUCCEEDED(hr)) { // search the streams for the video stream and attempt to modify the video size DWORD cbStreams = 0; hr = pIWMProfile- GetStreamCount( cbStreams); if (SUCCEEDED(hr)) { IWMStreamConfig* pIWMStreamConfig = NULL; GUID streamType = {0}; DWORD stream; if (m_bAudioMute) { // remove the audio stream for video only capture for (stream=0; stream cbStreams; ++stream) { hr = pIWMProfile- GetStream(stream, pIWMStreamConfig); if (SUCCEEDED(hr)) { hr = pIWMStreamConfig- GetStreamType( streamType); if (SUCCEEDED(hr)) { if (MEDIATYPE_Audio == streamType) { if (SUCCEEDED(pIWMProfile- RemoveStream(pIWMStreamConfig))) { --cbStreams; } SAFE_RELEASE(pIWMStreamConfig); break; } } } } } for (stream=0; stream cbStreams; ++stream) { hr = pIWMProfile- GetStream(stream, pIWMStreamConfig); if (SUCCEEDED(hr)) { hr = pIWMStreamConfig- GetStreamType( streamType); if (SUCCEEDED(hr) (MEDIATYPE_Video == streamType)) { // found the video stream CComQIPtr IWMMediaProps, IID_IWMMediaProps pIWMMediaProps = pIWMStreamConfig; if (pIWMMediaProps) { // get the size of the media type WM_MEDIA_TYPE* pMediaType = NULL; DWORD cbMediaType = 0; hr = pIWMMediaProps- GetMediaType(pMediaType, cbMediaType); if (SUCCEEDED(hr)) { pMediaType = (WM_MEDIA_TYPE*)new char [cbMediaType]; if (pMediaType) { hr = pIWMMediaProps- GetMediaType(pMediaType, cbMediaType); if (SUCCEEDED(hr)) { BITMAPINFOHEADER* pbmih = NULL; if (WMFORMAT_VideoInfo == pMediaType- formattype) { WMVIDEOINFOHEADER* pvih = (WMVIDEOINFOHEADER*)pMediaType- pbFormat; pbmih = pvih- bmiHeader; } else if (WMFORMAT_MPEG2Video == pMediaType- formattype) { WMVIDEOINFOHEADER2* pvih = (WMVIDEOINFOHEADER2*) ((WMMPEG2VIDEOINFO*)pMediaType- pbFormat)- hdr; pbmih = pvih- bmiHeader; } if (pbmih) { // modify the video dimensions, set the property, reconfigure the stream // and then configure the ASF writer with this modified profile pbmih- biWidth = 640;// was 320; pbmih- biHeight = 480;// was 240; pbmih- biSizeImage = pbmih- biWidth * pbmih- biHeight * pbmih- biBitCount / 8;// NOTE This calculation is not correct for all bit depths hr = pIWMMediaProps- SetMediaType(pMediaType); if (SUCCEEDED(hr)) { // config the ASF writer filter to use this modified system profile hr = pIWMProfile- ReconfigStream(pIWMStreamConfig); if (SUCCEEDED(hr)) { hr = pICW- ConfigureFilterUsingProfile(pIWMProfile); } } } } delete [] (char*)pMediaType; } } } } SAFE_RELEASE(pIWMStreamConfig); } } } } } /* // modify other ASF writer properties IServiceProvider* pProvider = NULL; hr = pASFWriter- QueryInterface(IID_IServiceProvider, reinterpret_cast void** ( pProvider)); if (SUCCEEDED(hr)) { IID_IWMWriterAdvanced2* pWMWA2 = NULL; hr = pProvider- QueryService(IID_IID_IWMWriterAdvanced2, IID_IID_IWMWriterAdvanced2, reinterpret_cast void** ( pWMWA2)); if (SUCCEEDED(hr)) { // set the deinterlace mode pWMWA2- GetInputSetting(...); SAFE_RELEASE(pWMWA2); } SAFE_RELEASE(pProvider); } */ } } else { hr = E_INVALIDARG; } return hr; } //----------------------------------------------------------------------------- // DestroyGraph // Remove all intermediate filters, keep any Decklink and video render filters as // these are used by all the graphs. HRESULT CDecklinkCaptureDlg DestroyGraph() { HRESULT hr = S_OK; if (m_pGraph m_pControl) { m_pControl- Stop(); // release our outstanding reference on this filter so it can be removed from the graph SAFE_RELEASE(m_pSmartT); // retrieve the name of the capture device, don t remove it in this method PWSTR pNameVideoCapture = (PWSTR)m_videoDeviceCtrl.GetItemData(m_videoDeviceCtrl.GetCurSel()); PWSTR pNameAudioCapture = (PWSTR)m_audioDeviceCtrl.GetItemData(m_audioDeviceCtrl.GetCurSel()); CComPtr IEnumFilters pEnum = NULL; hr = m_pGraph- EnumFilters( pEnum); if (SUCCEEDED(hr)) { IBaseFilter* pFilter = NULL; while (S_OK == pEnum- Next(1, pFilter, NULL)) { FILTER_INFO filterInfo = {0}; hr = pFilter- QueryFilterInfo( filterInfo); if (SUCCEEDED(hr)) { SAFE_RELEASE(filterInfo.pGraph); if ((NULL == wcsstr(filterInfo.achName, pNameVideoCapture)) (NULL == wcsstr(filterInfo.achName, pNameAudioCapture)) (NULL == wcsstr(filterInfo.achName, L"Video Renderer"))) { hr = m_pGraph- RemoveFilter(pFilter); if (SUCCEEDED(hr)) { hr = pEnum- Reset(); } } } SAFE_RELEASE(pFilter); } } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // InitialiseVideoPreview // In short get the video screen renderer to draw into the picture control, which is our preview window // the following code sets this up, in addition to adding the HandleGraphEvent and WindowProc methods // read the DXSDK docos for more detailed information void CDecklinkCaptureDlg InitialiseVideoPreview(void) { // modify the preview window if (m_pVideoRenderer) { if (NULL == m_pIVW) { if (SUCCEEDED(m_pVideoRenderer- QueryInterface(IID_IVideoWindow, reinterpret_cast void** ( m_pIVW)))) { // get the window to handle redraws, etc // Set msg drain of VideoWindow to point to our dialog window. The dialog s // window procedure then handles events from the VideoWindow. HRESULT hr = m_pIVW- put_MessageDrain(reinterpret_cast OAHWND (m_hWnd)); if (NULL == m_pMediaEvent) { // Make graph send WM_GRAPHNOTIFY when it wants our attention see "Learning // When an Event Occurs" in the DX9 documentation. hr = m_pGraph- QueryInterface(IID_IMediaEventEx, reinterpret_cast void** ( m_pMediaEvent)); if (SUCCEEDED(hr)) { hr = m_pMediaEvent- SetNotifyWindow(reinterpret_cast OAHWND (m_hWnd), WM_GRAPHNOTIFY, 0); } // object created for it. RECT rc; m_preview.GetClientRect( rc); m_pIVW- SetWindowPosition(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top); // VideoWindow is a child window of the bounding rect hr = m_pIVW- put_WindowStyle(WS_CHILD); hr = m_pIVW- put_Owner(reinterpret_cast OAHWND (m_preview.GetSafeHwnd())); hr = m_pIVW- SetWindowForeground(-1); } } } } } //----------------------------------------------------------------------------- // PopulateDeviceControl // Fill device combo box with available devices of the specified category HRESULT CDecklinkCaptureDlg PopulateDeviceControl(const GUID* pCategory, CComboBox* pCtrl) { HRESULT hr = S_OK; if (pCategory pCtrl) { // first enumerate the system devices for the specifed class and filter name CComPtr ICreateDevEnum pSysDevEnum = NULL; hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, reinterpret_cast void** ( pSysDevEnum)); if (SUCCEEDED(hr)) { CComPtr IEnumMoniker pEnumCat = NULL; hr = pSysDevEnum- CreateClassEnumerator(*pCategory, pEnumCat, 0); if (S_OK == hr) { IMoniker* pMoniker = NULL; bool Loop = true; while ((S_OK == pEnumCat- Next(1, pMoniker, NULL)) Loop) { IPropertyBag* pPropBag = NULL; hr = pMoniker- BindToStorage(0, 0, IID_IPropertyBag, reinterpret_cast void** ( pPropBag)); if (SUCCEEDED(hr)) { VARIANT varName; VariantInit( varName); hr = pPropBag- Read(L"FriendlyName", varName, 0); if (SUCCEEDED(hr)) { size_t len = wcslen(varName.bstrVal) + 1; PWSTR pName = new WCHAR [len]; StringCchCopyW(pName, len, varName.bstrVal); CW2AEX buf(varName.bstrVal); pCtrl- SetItemData(pCtrl- AddString(buf), (DWORD)pName); } VariantClear( varName); // contained within a loop, decrement the reference count SAFE_RELEASE(pPropBag); } SAFE_RELEASE(pMoniker); } } } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // PopulateVideoControl // Fill video format combo box with supported video formats using the IAMStreamConfig // interface. HRESULT CDecklinkCaptureDlg PopulateVideoControl() { HRESULT hr = S_OK; if (m_pVideoCapture) { // free mediatypes attached to format controls int count = m_videoFormatCtrl.GetCount(); if (count) { for (int item=0; item count; ++item) { DeleteMediaType((AM_MEDIA_TYPE*)m_videoFormatCtrl.GetItemData(item)); } m_videoFormatCtrl.ResetContent(); } // locate the video capture pin and QI for stream control CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pVideoCapture, MEDIATYPE_Video, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // loop through all the capabilities (video formats) and populate the control int count, size; hr = pISC- GetNumberOfCapabilities( count, size); if (SUCCEEDED(hr)) { if (sizeof(VIDEO_STREAM_CONFIG_CAPS) == size) { AM_MEDIA_TYPE* pmt = NULL; VIDEO_STREAM_CONFIG_CAPS vscc; VIDEOINFOHEADER* pvih = NULL; for (int index=0; index count; ++index) { hr = pISC- GetStreamCaps(index, pmt, reinterpret_cast BYTE* ( vscc)); if (SUCCEEDED(hr)) { char buffer[128]; WORD PixelFormat; float FrameRate; ZeroMemory(buffer, sizeof(buffer)); pvih = (VIDEOINFOHEADER*)pmt- pbFormat; char* pPixelFormatLUT[] = {"4 2 2", "4 4 4"}; if (pvih- bmiHeader.biBitCount == 16) PixelFormat = 8; else if (pvih- bmiHeader.biBitCount == 20) PixelFormat = 10; else PixelFormat = pvih- bmiHeader.biBitCount; // provide a useful description of the formats if (486 == pvih- bmiHeader.biHeight) { if (417083 == pvih- AvgTimePerFrame) { StringCbPrintfA(buffer, sizeof(buffer), "NTSC %d-bit %s (3 2 pulldown removal)", PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "NTSC %d-bit %s", PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } else if (576 == pvih- bmiHeader.biHeight) { StringCbPrintfA(buffer, sizeof(buffer), "PAL %d-bit %s", PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { char* pFrameRateFormat[] = {"%.2f", "%.0f"}; FrameRate = (float)(long)UNITS / pvih- AvgTimePerFrame; if ((720 == pvih- bmiHeader.biHeight) (59.94 FrameRate)) { if ((FrameRate - (int)FrameRate) 0.01) { StringCbPrintfA(buffer, sizeof(buffer), "HD720 %.2fp %d-bit %s (Overcranked 60p)", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "HD720 %.0fp %d-bit %s (Overcranked 60p)", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } else if ((720 == pvih- bmiHeader.biHeight) (59.94 = FrameRate)) { if ((FrameRate - (int)FrameRate) 0.01) { StringCbPrintfA(buffer, sizeof(buffer), "HD720 %.2fp %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "HD720 %.0fp %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } else if ((1080 == pvih- bmiHeader.biHeight) (50.00 = FrameRate)) { if ((FrameRate - (int)FrameRate) 0.01) { StringCbPrintfA(buffer, sizeof(buffer), "HD1080 %.2fi %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "HD1080 %.0fi %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } else { if ((FrameRate - (int)FrameRate) 0.01) { StringCbPrintfA(buffer, sizeof(buffer), "HD1080 %.2fPsF %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "HD1080 %.0fPsF %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } } // add the item description to combo box int n = m_videoFormatCtrl.AddString(buffer); // store media type pointer in item s data section m_videoFormatCtrl.SetItemData(n, (DWORD_PTR)pmt); // set default format if ((pvih- AvgTimePerFrame == m_vihDefault.AvgTimePerFrame) (pvih- bmiHeader.biWidth == m_vihDefault.bmiHeader.biWidth) (pvih- bmiHeader.biHeight == m_vihDefault.bmiHeader.biHeight) (pvih- bmiHeader.biBitCount == m_vihDefault.bmiHeader.biBitCount)) { m_videoFormatCtrl.SetCurSel(n); pISC- SetFormat(pmt); } } } } else { m_videoFormatCtrl.AddString("ERROR Unable to retrieve video formats"); } } } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // PopulateAudioControl // Fill audio format combo box with supported audio formats using the IAMStreamConfig // interface. HRESULT CDecklinkCaptureDlg PopulateAudioControl() { HRESULT hr = S_OK; if (m_pAudioCapture) { // free mediatypes attached to format controls int count = m_audioFormatCtrl.GetCount(); if (count) { for (int item=0; item count; ++item) { DeleteMediaType((AM_MEDIA_TYPE*)m_audioFormatCtrl.GetItemData(item)); } m_audioFormatCtrl.ResetContent(); } // locate the audio capture pin and QI for stream control CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pAudioCapture, MEDIATYPE_Audio, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // loop through all the capabilities (audio formats) and populate the control int count, size; hr = pISC- GetNumberOfCapabilities( count, size); if (SUCCEEDED(hr)) { if (sizeof(AUDIO_STREAM_CONFIG_CAPS) == size) { AM_MEDIA_TYPE* pmt = NULL; AUDIO_STREAM_CONFIG_CAPS ascc; WAVEFORMATEX* pwfex = NULL; for (int index=0; index count; ++index) { hr = pISC- GetStreamCaps(index, pmt, reinterpret_cast BYTE* ( ascc)); if (SUCCEEDED(hr)) { char buffer[32]; ZeroMemory(buffer, sizeof(buffer)); pwfex = (WAVEFORMATEX*)pmt- pbFormat; // provide a useful description of the formats if (1 == pwfex- nChannels) { StringCbPrintfA(buffer, sizeof(buffer), "%d channel, %2.1fkHz, %d-bit", (int)pwfex- nChannels, (float)pwfex- nSamplesPerSec / 1000, (int)pwfex- wBitsPerSample); } else { StringCbPrintfA(buffer, sizeof(buffer), "%d channels, %2.1fkHz, %d-bit", (int)pwfex- nChannels, (float)pwfex- nSamplesPerSec / 1000, (int)pwfex- wBitsPerSample); } // add the item description to combo box int n = m_audioFormatCtrl.AddString(buffer); // store media type pointer in item s data section m_audioFormatCtrl.SetItemData(n, (DWORD_PTR)pmt); // set default format if ((pwfex- wFormatTag == m_wfexDefault.wFormatTag) (pwfex- nChannels == m_wfexDefault.nChannels) (pwfex- nSamplesPerSec == m_wfexDefault.nSamplesPerSec) (pwfex- nAvgBytesPerSec == m_wfexDefault.nAvgBytesPerSec)) { m_audioFormatCtrl.SetCurSel(n); pISC- SetFormat(pmt); } } } } else { m_audioFormatCtrl.AddString("ERROR Unable to retrieve audio formats"); } } } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // PopulateCompressionControl // Fill compression control with a selection of video compressors, locate the // encoders and add them to the combo box if they exist. HRESULT CDecklinkCaptureDlg PopulateCompressionControl() { int n = m_compressionCtrl.AddString("Uncompressed"); m_compressionCtrl.SetItemData(n, (DWORD_PTR)ENC_NONE); // search for the DV encoder, MPEG encoder and WM encoder IBaseFilter* pFilter = NULL; HRESULT hr = CoCreateInstance(CLSID_DVVideoEnc, 0, CLSCTX_INPROC_SERVER, IID_IBaseFilter, reinterpret_cast void** ( pFilter)); if (SUCCEEDED(hr)) { n = m_compressionCtrl.SetCurSel(m_compressionCtrl.AddString("DV Video Encoder")); m_compressionCtrl.SetItemData(n, (DWORD_PTR)ENC_DV); SAFE_RELEASE(pFilter); } hr = CoCreateInstance(CLSID_WMAsfWriter, 0, CLSCTX_INPROC_SERVER, IID_IBaseFilter, reinterpret_cast void** ( pFilter)); if (SUCCEEDED(hr)) { n = m_compressionCtrl.SetCurSel(m_compressionCtrl.AddString("Windows Media Encoder")); m_compressionCtrl.SetItemData(n, (DWORD_PTR)ENC_WM); SAFE_RELEASE(pFilter); } m_compressionCtrl.SetCurSel(m_compressor); return S_OK; } //----------------------------------------------------------------------------- // OnCbnSelchangeComboVideodevice // Rebuild graph with selected capture device void CDecklinkCaptureDlg OnCbnSelchangeComboVideodevice() { SAFE_RELEASE(m_pVideoCapture);// release our outstanding reference // remove intermediate filters, since the device selection has changed the capture device will also be removed HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // rebuild graph with new capture device selection PWSTR pName = (PWSTR)m_videoDeviceCtrl.GetItemData(m_videoDeviceCtrl.GetCurSel()); if (pName) { hr = CDSUtils AddFilter2(m_pGraph, CLSID_VideoInputDeviceCategory, pName, m_pVideoCapture); if (SUCCEEDED(hr)) { // as the device has changed get the current operating format so that the control // and display this as the current selection CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pVideoCapture, MEDIATYPE_Video, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // get the current format of the device to set the current selection of the control AM_MEDIA_TYPE* pamt = NULL; hr = pISC- GetFormat( pamt); if (SUCCEEDED(hr)) { if (pamt- pbFormat) { m_vihDefault = *(VIDEOINFOHEADER*)pamt- pbFormat; } DeleteMediaType(pamt); } } hr = PopulateVideoControl();// repopulate the control with formats from the new device if (SUCCEEDED(hr)) { hr = CreatePreviewGraph();// rebuild the graph with the new device } } } else { hr = E_POINTER; } } } //----------------------------------------------------------------------------- // OnCbnSelchangeComboAudiodevice // Rebuild graph with selected capture device void CDecklinkCaptureDlg OnCbnSelchangeComboAudiodevice() { SAFE_RELEASE(m_pAudioCapture);// release our outstanding reference // remove intermediate filters, since the device selection has changed the capture device will also be removed HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { PWSTR pName = (PWSTR)m_audioDeviceCtrl.GetItemData(m_audioDeviceCtrl.GetCurSel()); if (pName) { hr = CDSUtils AddFilter2(m_pGraph, CLSID_AudioInputDeviceCategory, pName, m_pAudioCapture); if (SUCCEEDED(hr)) { // as the device has changed get the current operating format so that the control // and display this as the current selection CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pAudioCapture, MEDIATYPE_Audio, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // get the current format of the device to set the current selection of the control AM_MEDIA_TYPE* pamt = NULL; hr = pISC- GetFormat( pamt); if (SUCCEEDED(hr)) { if (pamt- pbFormat) { m_wfexDefault = *(WAVEFORMATEX*)pamt- pbFormat; } DeleteMediaType(pamt); } } hr = PopulateAudioControl();// repopulate the control with formats from the new device if (SUCCEEDED(hr)) { hr = CreatePreviewGraph();// rebuild the graph with the new device } } } else { hr = E_POINTER; } } } //----------------------------------------------------------------------------- // OnCbnSelchangeComboVideoformats // Rebuild preview graph if format selection changed void CDecklinkCaptureDlg OnCbnSelchangeComboVideoformats() { HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // locate the video capture pin and QI for stream control CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pVideoCapture, MEDIATYPE_Video, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // set the new media format AM_MEDIA_TYPE* pmt = (AM_MEDIA_TYPE*)m_videoFormatCtrl.GetItemData(m_videoFormatCtrl.GetCurSel()); m_vihDefault = *(VIDEOINFOHEADER*)pmt- pbFormat; ASSERT(sizeof(VIDEOINFOHEADER) = pmt- cbFormat); hr = pISC- SetFormat(pmt); if (SUCCEEDED(hr)) { // save the new format EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoFormat", reinterpret_cast const BYTE* ( m_vihDefault), sizeof(m_vihDefault))); // update compression control, we don t have an HD compression filter so disable compression for HD formats if (576 m_vihDefault.bmiHeader.biHeight) { m_compressor = 0; m_compressionCtrl.SetCurSel(m_compressor); // save the new state EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoCompressor", reinterpret_cast const BYTE* ( m_compressor), sizeof(m_compressor))); m_bEnableCompressionCtrl = FALSE; } else { m_bEnableCompressionCtrl = TRUE; } EnableControls(); // rebuild the graph hr = CreatePreviewGraph(); } } } } //----------------------------------------------------------------------------- // OnCbnSelchangeComboAudioformats // Rebuild preview graph if format selection changed void CDecklinkCaptureDlg OnCbnSelchangeComboAudioformats() { HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // locate the audio capture pin and QI for stream control CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pAudioCapture, MEDIATYPE_Audio, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // set the new media format AM_MEDIA_TYPE* pmt = (AM_MEDIA_TYPE*)m_audioFormatCtrl.GetItemData(m_audioFormatCtrl.GetCurSel()); m_wfexDefault = *(WAVEFORMATEX*)pmt- pbFormat; ASSERT(sizeof(WAVEFORMATEX) == pmt- cbFormat); hr = pISC- SetFormat(pmt); if (SUCCEEDED(hr)) { // save the new format EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("AudioFormat", reinterpret_cast const BYTE* ( m_wfexDefault), sizeof(m_wfexDefault))); // rebuild the graph hr = CreatePreviewGraph(); } } } } //----------------------------------------------------------------------------- // OnCbnSelchangeComboCompression // Rebuild preview graph if compression selection changed void CDecklinkCaptureDlg OnCbnSelchangeComboCompression() { HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // save the new state m_compressor = m_compressionCtrl.GetCurSel(); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoCompressor", reinterpret_cast const BYTE* ( m_compressor), sizeof(m_compressor))); // rebuild the graph hr = CreatePreviewGraph(); } } //----------------------------------------------------------------------------- // OnBnClickedCheckAudiomute // Rebuild the capture graph to reflect the new audio setting void CDecklinkCaptureDlg OnBnClickedCheckAudiomute() { CButton* pCheck = (CButton*)GetDlgItem(IDC_CHECK_AUDIOMUTE); if (pCheck) { m_bAudioMute = pCheck- GetState() 0x0003; HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // save the new state EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("AudioMute", reinterpret_cast const BYTE* ( m_bAudioMute), sizeof(m_bAudioMute))); // rebuild the graph which reflects the new audio setting hr = CreatePreviewGraph(); } } } //----------------------------------------------------------------------------- // OnBnClickedButtonBrowse // Create a file open dialog to browse for a file location void CDecklinkCaptureDlg OnBnClickedButtonBrowse() { char BASED_CODE szFilters[] = "Windows Media Files|*.avi;*.asf;*.wmv|All Files (*.*)|*.*||"; char* pExt[] = {"*.avi", "*.avi", "*.asf;*.wmv"}; CFileDialog FileDlg(TRUE, "Windows Media Files", pExt[m_compressor], 0, szFilters, this); if (FileDlg.DoModal() == IDOK) { m_captureFile = FileDlg.GetPathName(); m_captureFileCtrl.SetWindowText(m_captureFile); } } //----------------------------------------------------------------------------- // OnBnClickedButtonCapture // Create a capture graph a start capture void CDecklinkCaptureDlg OnBnClickedButtonCapture() { HRESULT hr = CreateCaptureGraph(); if (SUCCEEDED(hr)) { if (m_pControl) { hr = m_pControl- Run(); if (SUCCEEDED(hr)) { DisableControls(); } } } } //----------------------------------------------------------------------------- // OnBnClickedButtonStop // Stop capture and revert to preview void CDecklinkCaptureDlg OnBnClickedButtonStop() { HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { hr = CreatePreviewGraph(); if (SUCCEEDED(hr)) { EnableControls(); } } } //----------------------------------------------------------------------------- // EnableControls // void CDecklinkCaptureDlg EnableControls(void) { CWnd* pWnd = GetDlgItem(IDC_COMBO_VIDEOFORMATS); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_COMBO_AUDIOFORMATS); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_CHECK_AUDIOMUTE); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_COMBO_COMPRESSION); m_bEnableCompressionCtrl = (576 m_vihDefault.bmiHeader.biHeight) ? FALSE TRUE;// don t have an HDV codec do disable compression control for HD formats pWnd- EnableWindow(m_bEnableCompressionCtrl); pWnd = GetDlgItem(IDC_EDIT_CAPTUREFILE); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_BUTTON_BROWSE); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_BUTTON_CAPTURE); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_BUTTON_STOP); pWnd- EnableWindow(FALSE); } //----------------------------------------------------------------------------- // DisableControls // void CDecklinkCaptureDlg DisableControls(void) { CWnd* pWnd = GetDlgItem(IDC_COMBO_VIDEOFORMATS); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_COMBO_AUDIOFORMATS); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_CHECK_AUDIOMUTE); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_COMBO_COMPRESSION); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_EDIT_CAPTUREFILE); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_BUTTON_BROWSE); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_BUTTON_CAPTURE); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_BUTTON_STOP); pWnd- EnableWindow(TRUE); } //----------------------------------------------------------------------------- // QueryRegistry // retrieve previous media formats from registry void CDecklinkCaptureDlg QueryRegistry(void) { if (ERROR_SUCCESS == m_regUtils.Open("DecklinkCaptureSample")) { EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetBinary("VideoFormat", reinterpret_cast LPBYTE ( m_vihDefault), sizeof(m_vihDefault))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetBinary("AudioFormat", reinterpret_cast LPBYTE ( m_wfexDefault), sizeof(m_wfexDefault))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetBinary("AudioMute", reinterpret_cast LPBYTE ( m_bAudioMute), sizeof(m_bAudioMute))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetBinary("VideoCompressor", reinterpret_cast LPBYTE ( m_compressor), sizeof(m_compressor))); WCHAR captureFile[MAX_PATH]; ZeroMemory(captureFile, sizeof(captureFile)); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetString("CaptureFile", reinterpret_cast LPBYTE (captureFile), sizeof(captureFile))); m_captureFile = captureFile; } else { // create the key and registry values if (ERROR_SUCCESS == m_regUtils.Create("DecklinkCaptureSample")) { EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoFormat", reinterpret_cast const BYTE* ( m_vihDefault), sizeof(m_vihDefault))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("AudioFormat", reinterpret_cast const BYTE* ( m_wfexDefault), sizeof(m_wfexDefault))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("AudioMute", reinterpret_cast const BYTE* ( m_bAudioMute), sizeof(m_bAudioMute))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoCompressor", reinterpret_cast const BYTE* ( m_compressor), sizeof(m_compressor))); } } // update mute audio check box control CButton* pButton = (CButton*)GetDlgItem(IDC_CHECK_AUDIOMUTE); pButton- SetCheck(m_bAudioMute); }
https://w.atwiki.jp/live2ch/pages/463.html
トップ キャプボカテゴリ概要 各キャプチャーボードの詳しい使い方 Elgato Game Capture HD60 Pro / 2020年05月26日 (火) 19時56分18秒 キャプチャーボードの基本的な知識については、キャプチャーボードをご覧ください。 キャプチャーボードの選び方については、キャプチャーボードの選び方をご覧ください。 ライブ配信にも使える!低遅延、1080p/60fps対応のElgato新製品 Elgato Game Capture HD60 Pro(以下Game Capture HD60 Pro)は、HDMI端子を搭載したHDキャプチャーボードです。デスクトップPC用の製品で、Game Capture HDシリーズのひとつです。 ▲Amazonで Elgato Game Capture HD60 Proの価格・レビューを見る(リンク先 Amazon) 1080p/60fpsに完全対応 1080p/60fpsに完全対応しています。最高画質のゲームを完璧にキャプチャーできます。 もはや遅延は問題にならない(インスタントゲームビュー機能) Game Capture HD60 Proには、インスタントゲームビュー機能というものが搭載されています。これにより、PCの画面を見ながらでもゲームを快適にプレイできるようになりました。表示遅延(ラグ)が小さいからです。リアルタイムでのコミュニケーションが重要なライブ配信にも向いています。 大画面TVでゲームをプレイしながら録画・配信できる ゲームプレイは大画面TVを見ながらしたいという人もいるでしょう。そのような場合は、ゲーム機の映像をPCに加えてTVにも映すことができます(パススルー出力機能)。TVにゲーム画面を映した状態で、PCのほうで録画やライブ配信すれば、いつもどおりゲームができます。 時間を遡ってゲームプレイを再生・録画できる ゲームをプレイ中に、いま起こったハプニングや印象的な場面を見返したくなったとき、リプレイのように映像を遡って再生・録画できる機能を搭載しています(Flashback録画機能)。もう決定的な瞬間を見逃すことはありません。録画するのを忘れていても安心です。 目次 動作環境・製品仕様接続できるのはHDMIに対応したゲーム機 付属品 他製品との比較Game Capture HD/HD60 C988 ソフトウェアをインストールする ゲーム機を接続する 詳しい使い方 筆者がGame Capture HD60 Proを使用した感想よい点 悪い点 関連ページ 動作環境・製品仕様 Game Capture HD60 Pro(Amazonで価格を見る) Elgato Game Capture HD60 Pro 接続方式 PCI Express x1 エンコードタイプ ハードウェアエンコード ビデオ入力端子 HDMI端子 対応OS Windows 7 SP1以降、Macには非対応 備考 ソフトウェアはダウンロード 接続できるのはHDMIに対応したゲーム機 Game Capture HD60 Proと接続できるのは、HDMI端子を搭載したゲーム機です。同端子を搭載していないゲーム機は接続できません。また、Game Capture HD60 ProはHDCPに対応していないため、PS3やPS Vita TVを接続しても映像を表示・録画できません。対処法については、HDCPを知るをご覧ください。 HDMI端子による接続 備考 PS4 ○ PS4側の設定でHDCPをOFFにしておく PS3 × ただしHDMI分配器を使えば対処可能(後述) PS2 × Switch ○ HDMI接続で問題なし Switch Lite × Wii U ○ HDMI接続で問題なし Wii × Xbox One ○ HDMI接続で問題なし Xbox 360 ○ HDMI接続で問題なし PSP-3000/2000 × PS Vita TV × ただしHDMI分配器を使えば対処可能 iOSデバイス ○ 問題なし 付属品 Game Capture HD60 Proの付属品は以下のとおりです。CD-ROMは付属されていません。ソフトウェアは公式サイトからダウンロードして入手します(後述)。ロープロファイル用のブラケットは、省スペースPC(スリムタイプPC)用の付属品です。通常は使いません。 ▲画面の上へ 他製品との比較 1080p/60fpsに完全対応している製品として以下のようなものがあります。 Game Capture HD/HD60 Game Capture HD、およびGame Capture HD60との違いは下表のとおりです。Game Capture HD60 Proが他の2製品より有利な点は、インスタントゲームビュー機能が搭載されている点に尽きるといってよいでしょう。表示遅延(タイムラグ)が小さいのです。 インスタントゲームビュー 1080p/60fpsキャプチャー コンポーネント端子 ノートPC Game Capture HD × × ○ ○ Game Capture HD60 × ○ × ○ Game Capture HD60 S ○ ○ × ○ Game Capture HD60 Pro ○ ○ × × 一般的なハードウェアエンコードの製品の場合、通常はPCに表示したゲーム画面を見ながらゲームプレイはできません。キャプチャーボードの遅延が原因です。しかし、Game Capture HD60 Proにはインスタントゲームビュー機能があります。この機能のおかげで、場合によってはPCのゲーム画面を見ながらでもゲームをプレイできるのです。 もちろん、遅延が0というわけではありません。しかし、必ずしもTV(またはPCモニター)を別途用意して遅延対策しなくてもよいケースがあるという点が大きいのです。Game Capture HD/HD60では、TVを用意してTVに映したゲーム画面を見ながらゲームをプレイしなくてはいけませんでした。Game Capture HD60 Proではこの点が改善されたわけです(*1)。どの程度の遅延があるかは、以下のElgato公式動画を参考にしてください。 C988 C988もPCI Express x1接続の製品です。Game Capture HD60 Proと比較して、機能的に大きな違いがあるわけではありません。細かい違いがあるだけです。対応しているゲーム機もまったく同じで、実売価格もほぼ変わりません。筆者の環境では、どちらも安定して動作しており、優劣は甲乙つけがたいといったところです。 ▲C988 なお、理由は不明ですが、C988は対応OSにWindows 7が含まれていません。これに対し、Game Capture HD60 ProのほうはWindows 7にも対応しています。 ▲画面の上へ ソフトウェアをインストールする Game Capture HD60 Proを使用するためには、PCに取り付けたうえでソフトウェアをインストールする必要があります。 本製品をPCのPCI Expressスロットに接続する(接続方法はこちら)。 PCを起動する。 公式サイトにアクセスし、「Game Capture for Windows」の部分にある「ダウンロード」をクリックする。 ダウンロードした「GameCaptureSetup_xxx.msi」をダブルクリックする。 画面を順に進めていく。 ソフトウェアのインストールが完了する。 ▲画面の上へ ゲーム機を接続する ゲーム機とGame Capture HD60 ProをHDMIケーブルで接続します。Game Capture HD60 ProのHDMI端子には「IN」と「OUT」のふたつの種類があります。ゲーム機を接続するのは「IN」のほうです。まちがえないようにしましょう。 PS3(またはPS Vita TV)を接続する場合は、「 KanaaN HDMIスプリッター 1入力2出力 4k対応 Y-アダプタ 2160p Full UHD/ HD 1.4b 2-fach / 2-port」(リンク先 Amazon)を使ってHDCPを回避します。 ▲PS3をHDMI分配器の「IN」に接続します。また、HDMI分配器の「OUT」とGame Capture HD60 Proの「IN」を接続します。 iPhoneなどのiOSデバイスをHDMI接続する場合は、 Lightning - Digital AVアダプタ(リンク先 Amazon)が別途必要です。 キャプチャーボードを使ってiPhoneの画面をPCに映す方法を参照 ▲画面の上へ 詳しい使い方 このあとは、ゲーム画面をPCに表示するための設定を行っていきましょう。ゲーム画面をPCに表示できたら、つぎはパススルー出力して遅延を回避する方法や、録画方法、動画に声を入れる方法、ライブ配信の方法を理解しておく必要があります。 Elgato Game Capture HDシリーズの使い方を参照 ▲画像は、PS4版『METAL GEAR SOLID V The Phantom Pain』(コナミデジタルエンタテイメント)より ▲画面の上へ 筆者がGame Capture HD60 Proを使用した感想 Elgato Game Capture HD60 Pro posted with カエレバ Elgato 2015-10-29 Amazon 楽天市場 よい点 ほぼ遅延は気にならない。ほかのElgato製品(Game Capture HD/HD60)より圧倒的に遅延は小さい。パススルー出力もできるので、遅延で困ることはない。 ライブ配信でも問題なく使用できる。Game Capture HD/HD60では、遅延の関係でライブ配信で不満が出やすいところだが、Game Capture HD60であればまったく問題ない。 ハードウェアエンコーダーを搭載しているので、CPU使用率はGC550(ソフトウェアエンコード時)よりも低かった。1080p/60fpsで録画中に顕著な差が出る。筆者の環境では、GC550よりも25~35%ほど低い。ただし、GC550の場合でもハードウェアエンコードすれば大差はない。 PCIe接続の製品を探している場合、この製品は購入候補のひとつになる。USB 3.0接続のような不安はない。 悪い点 付属のキャプチャーソフトは、インスタントゲームビュー機能に合わせて仕様を変更してほしい部分がある。たとえば、ライブコメント機能使用時にヘッドホン(スピーカー)からマイクの音が出る点や、一発でフルスクリーンにできない点など。 時間を遡って映像を再生・録画できる機能については、GC550のほうが使いやすいと感じた。一例だが、Game Capture HD60の場合は、録画を開始するとそれまでの映像が破棄されてしまう。ただし、このあたりは考え方にもよる。 ▲画面の上へ 関連ページ コメント質問など キャプチャーボードの映像・音声が出ないときはキャプチャーソフト 上で 映像を表示できない、音声が聞こえない場合の対処法 キャプチャーボードが不安定な場合の対処法キャプチャーボードが不安定!そんなときに試すべき対処法 キャプチャーボードがPCに認識されない場合の対処法キャプチャーデバイスが見つからない?そんなときに試すべき対処法 ゲーム実況で使える無料・有料のおすすめ編集ソフトお薦めは3本!AviUtl、PowerDirector、Vegas Proで決まり AviUtlの使い方無料で使える!動画編集ソフトの決定版 ゲーム配信で必要になるものあらゆる配信サイトに対応!ゲーム配信で必要なものを準備しよう Skypeの通話音声を動画に入れる方法動画にSkypeの通話音声を入れるやり方、3パターンを解説 マイクの音が小さいときの対処法マイクが声を拾ってくれない!というときに試すべき方法 ▲画面の上へ
https://w.atwiki.jp/live2ch/pages/278.html
トップ キャプボカテゴリ概要 各キャプチャーボードの詳しい使い方 GV-USB2 / 2018年01月07日 (日) 18時35分50秒 キャプチャーボードの基本的な知識については、キャプチャーボードをご覧ください。 キャプチャーボードの選び方については、キャプチャーボードの選び方をご覧ください。 最初はこれ!入門用ビデオキャプチャー GV-USB2は、USB接続のビデオキャプチャーです。GV-USB2を使うことにより、ライブ配信でゲーム実況をしたり、ゲームを録画して実況プレイ動画を作成することができるようになります。また、VHSビデオテープをPCまたはDVDに保存することもできます。 ▲ レトロゲーム機を接続するときに便利なGV-USB2(リンク先 Amazon) 入門用に最適 初心者でも接続・設定が簡単に行えます。GV-USB2なら迷う心配がありません。実売価格も3,500円前後と手軽です。使用者も多く、これ以上に入門用として最適なビデオキャプチャーは存在しないでしょう。 レトロゲームに対応できる PS3/PS2、WiiU/Wiiなどのゲーム機はもちろん、PS1、GC、N64、SFC、NEW FCといった古い世代のゲーム機も接続できます。近年のビデオキャプチャーは、古い世代のゲーム機を接続できないことが多いのですが、GV-USB2であれば対応可能です。レトロゲームに興味があるなら、迷わずGV-USB2にしましょう。 コンパクトで堅牢(けんろう)な作り GV-USB2は本体がコンパクトです。ノートPCに接続しても机周りの場所をとりません。しかも頑丈です。 目次 仕様・動作環境接続可能なゲーム機の例 GV-USB2の画質について GV-USB2シリーズについて ドライバおよびキャプチャーソフトのインストール ゲーム機との接続方法PS3、PS2、PS1の場合 Wii U、Wiiの場合 GC、N64、SFC、NEW FCの場合 PSPの場合 S端子接続について ゲーム画面の映し方 録画方法 アマレコTV 動画作成・ライブ配信のポイント実況プレイ動画を作成する場合 ライブ配信する場合 遅延について こんなときはゲーム画面が表示されない TVにゲーム画面を映してプレイしたい 16 9の画面にしたい 製品が認識されない 製品が不安定だ その他 筆者がGV-USB2を使用した感想よい点 悪い点 関連ページ 仕様・動作環境 GV-USB2 接続方式 USB 2.0 エンコードタイプ ソフトウェアエンコード ビデオ入力端子 コンポジット端子・S端子 対応OS Windows 10/8.1/8/7(32/64bit)、Vista(32bit)、XP(SP2以降) 接続可能なゲーム機の例 GV-USB2には、コンポジット端子およびS端子が搭載されています。例として下表のようなゲーム機を接続できます。注意したいのですが、PS4やSwitchなどは接続できません(非対応)。 コンポジット端子による接続 S端子による接続 備考 PS4 × × 非対応 PS3 ○ ○ PS2 ○ ○ PS1 ○ ○ Switch × × 非対応 Wii U ○ ○ Wii ○ ○ SFC ○ ○ GC ○ ○ N64 ○ ○ NEW FC ○ ○ Xbox One × × 非対応 Xbox 360 ○ ○ PSP-3000 ○ ○ PSP-2000 × × 非対応 PS Vita TV × × 非対応 GV-USB2の画質について たまに誤解される方がいるのですが、ゲーム機をGV-USB2に接続したときの画質というのは、HD画質ではありません。コンポジット端子、およびS端子の仕様上、SD画質(標準画質)となります。 参考までに動画を用意しました。この動画は、S端子でPS3とGV-USB2を接続して録画したものです。もし画質に満足がいかない場合は、GV-USB3/HDを購入するようにしましょう。同製品はGV-USB2の後継モデルで、HDMI端子を搭載しています。なお、S端子での接続方法については後述します。 GV-USB2シリーズについて GV-USB2の上位モデルとしてGV-USB2/HQ(リンク先 Amazon)があります。同製品は、付属アプリの編集機能を強化されており、また映像をアップスケーリングしてブルーレイに保存することができます。しかし、GV-USB2/HQはGV-USB2とハードウェアレベルでの違いはありません。添付されているソフトウェアが異なるだけです。どちらを購入すべきか迷ったら、価格の安いGV-USB2でよいでしょう。 GV-USB2シリーズには、さらにGV-USB2/A(リンク先 Amazon)があります。これはAndroid端末に対応した製品です(詳細は公式サイトを参照)。PCでのみ使えればよいという人にはGV-USB2が適しています。GV-USB2/Aを購入する必要はありません。以下の解説は、GV-USB2の使用を前提にしているので注意してください。 ▲画面の上へ ドライバおよびキャプチャーソフトのインストール では、ここからGV-USB2の使い方について見ていきましょう。GV-USB2を使用するためには、ドライバとキャプチャーソフトをインストールする必要があります。GV-USB2はまだPCに接続しないでください。 CD-ROMをPCにセットします。 「自動インストール」をクリックします(*1)。 「開始」をクリックします。 「デバイスの検索中です。[GV-USB2]をUSBポートにしっかりと取り付けてください。」と表示されたら、GV-USB2をPCのUSBポートに接続します。GV-USB2はUSB2.0に接続してください(*2)。 PCの再起動を促すメッセージが表示されるので、「OK」をクリックします。 ▲画面の上へ ゲーム機との接続方法 PS3、PS2、PS1の場合 PS3、PS2、PS1には、コンポジットケーブル(AVケーブル)が付属されています。このケーブルを使ってゲーム機とGV-USB2を接続します。紛失したのであれば、PS3/PS2/PS用 S+AV端子ケーブル(リンク先 Amazon)を購入してください。 Wii U、Wiiの場合 Wii U、Wiiについても同様に、黄・白・赤のAVケーブルを使って接続します。紛失した場合は、WiiU/Wii用 S+AV端子ケーブル(リンク先 Amazon)を購入します。Wii UにはAVケーブルが付属されていませんが、Wii用のAVケーブルを流用可能です。 GC、N64、SFC、NEW FCの場合 GC、N64、SFC、NEW FCの場合、ゲーム機を購入したときに同梱されていた黄・白・赤のAVケーブルで接続します。紛失したのであれば、New FC/SFC/N64/GC用 S+AV端子ケーブル(リンク先 Amazon)が必要です。 PSPの場合 PSP-3000の場合は、PSP用 S端子&AVケーブル(リンク先 Amazon)を別途用意します。 S端子接続について 少しでも画質を向上させたい場合は、S端子でゲーム機と接続しましょう。S端子で接続すると、下記画像のように色のにじみが抑えられ、文字が少し読みやすくなります。 ただ、S端子ケーブルはゲーム機に付属されていません。したがって、S端子ケーブルを別途用意する必要があります。S端子ケーブルについては、上で述べた「S端子+AVケーブル」を使用してください。S端子で接続するときは、コンポジット端子にはなにも接続しません。 ▲画面の上へ ゲーム画面の映し方 ゲーム機を接続できたら、つぎはLightCaptureにゲーム画面を表示させてみましょう。手順は以下のとおりです。 デスクトップ画面にあるLightCaptureのショートカットアイコンをダブルクリックします。 ゲーム機の電源を入れます。PS3の場合は、電源を5秒以上長押しして起動するとよいでしょう(*3)。PSPの場合は、電源を入れたあと「ディスプレイ」ボタンを5秒以上長押しします。 ゲーム画面が表示され、音が聞こえてきます。 ゲーム画面が映らない場合は、「設定」ボタンをクリックして「映像フォーマット」で「入力先」が正しく設定されているか確認しましょう。 ▲「設定」ボタンをクリックして、「入力先」を「コンポジット」または「S端子」にします。 それでも映像が映らない場合は、以下のページをご覧ください。 キャプチャーボードの映像・音声が出ないときはを参照 LightCaptureをいつも最前面に表示しておきたいときは、「設定」ボタンをクリックして「その他」で「常に全面を表示する」にチェックを入れます。 映像が表示されている画面をダブルクリックすると、ゲーム機の映像をフルスクリーンで表示(全画面表示)できます。フルスクリーンを解除するには、画面を再度ダブルクリックします。 PS3などの映像を表示すると縦横比が狂い、映像が少し横に伸びた状態になります(*4)。対処法は、アマレコTVというキャプチャーソフトを使うことです(後述)。 ▲時計の絵が横に潰れています。 ▲画面の上へ 録画方法 LightCaptureで映像・音声を視聴できているなら録画は簡単です。録画を開始するには「録画」ボタンをクリックします。録画の停止は「停止」ボタンをクリックしてください。 録画してできた動画ファイル(録画ファイル)を確認するには、「一覧」ボタンをクリックします。すると、録画ファイルが保存されているフォルダが開きます。動画を再生して正常に録画されていることを確認してください。動画はMPEG-2とよばれるファイル形式になっています。 録画ファイルは、Windows 7であれば「C \Users\ユーザー名\Documents\Light Capture 録画フォルダ」に保存されています(*5)。録画ファイルの保存場所を変更したい場合は、まず「設定」ボタンをクリックします。そして、「録画動作」にある「録画ファイルの保存先」で「参照」をクリックして保存先を変更しましょう。 ▲画面の上へ アマレコTV GV-USB2付属のLightCaptureには、あくまでも最低限の機能しか搭載されていません。そこで、多機能なキャプチャーソフトであるアマレコTVを使用してみましょう。アマレコTVには、LightCaptureにはない魅力的な機能がたくさん搭載されています。単純な使いやすさという観点から見ても、アマレコTVのほうが上です。 ▲PS3およびアマレコTVのそれぞれの設定を変更することにより、この画像のように映像を16 9で表示することもできます。 たとえば、アマレコTVにはミキシング機能があります。同機能を使うと、ゲームを録画中に、マイクの音をそのまま動画に入れることができます。実況プレイ動画を作成さいに役立つことでしょう。また、LightCaptureでは正しい縦横比で映像を表示できない場合がありますが、アマレコTVでは縦横比を変更できます。 アマレコTVを参照 なお、アマレコTVを使用するさいはLightCaptureを起動する必要はありません。 ▲画面の上へ 動画作成・ライブ配信のポイント 実況プレイ動画を作成する場合 実況プレイ動画を作成するさい、PCにマイクを接続してLightCaptureで録画すると、動画にマイク音は入りません。なぜなら、LightCaptureはマイクの音を録音できない仕様になっているからです。 では、どのようにしてマイク音声を録音するのかということになりますが、端的にいって上述のアマレコTVを使いましょう。アマレコTVの場合は、LightCaptureと違ってマイクの音を動画に入れられる機能を搭載しています。 動画編集については、下記ページをご覧ください。 ゲーム実況で使える無料・有料のおすすめ編集ソフトを参照 ライブ配信する場合 ゲーム配信を行う場合、基本的には配信ソフトを使います。配信ソフトを使うと、ゲーム画面を視聴者に見せることができます。また、ゲーム音やマイク音も流すことができます。ゲーム配信の基本的なやり方については、下記ページをご覧ください。 解説記事 備考 ニコニコ生放送 こちら ツイキャス こちら Twitch こちら お薦め YouTube Live・YouTube Gaming こちら お薦め OPENREC こちら Mixer(旧Beam) こちら ▲画面の上へ 遅延について ビデオキャプチャーを使用してゲームをプレイする場合、遅延(タイムラグ)が問題になることがあります。ラグというのは、ゲームを操作してから映像が表示されるまでの時間差のことをいいます。ラグはビデオキャプチャーで必ず発生します。 GV-USB2もビデオキャプチャーである以上、ラグは発生します。問題は、そのラグが妥協できる程度のものであるかということです。結論からいうと、GV-USB2で生じるラグはそこまで支障が出るレベルではありません。しかし、ゲームのジャンルにもよります。もしGV-USB2のラグが気になる場合は、ゲーム機の映像を分配しましょう。コンポジット端子を搭載しているTVまたはPCモニターが別途必要になります。 また、分配ケーブル(リンク先 Amazon)とピン端子-ピン端子中継プラグ(リンク先 Amazon)も必要です。機材をそろえて図のように接続すると、ゲーム機の映像がPCとTVの両方に表示されます。TVに表示されている映像は、GV-USB2のラグの影響を受けていません。そこで、TVを見ながらゲームをプレイし、PCのほうで録画・配信します。 キャプチャーボードのラグを回避する方法を参照 ▲画面の上へ こんなときは ゲーム画面が表示されない キャプチャーソフトにゲーム画面が表示されない場合、以下のような対処法があります。まずは問題の切り分けのため、 LightCaptureにゲーム画面が表示される状態をめざしましょう。 PS3を接続している場合は、PS3の電源を5秒以上長押しして起動する。 LightCaptureの「設定」→「映像フォーマット」で「入力端子」を正しく設定する。 ゲーム機とGV-USB2を接続しているケーブルを、しっかりと接続しなおす。 キャプチャーボードの映像・音声が出ないときはを参照 TVにゲーム画面を映してプレイしたい PCだけではなく、TVにもゲーム画面を表示したい場合は、ゲーム機の映像・音声をPCとTVの両方に分配出力します。そこで、映像・音声を分配するための製品が必要になります。 キャプチャーボードのラグを回避する方法を参照 16 9の画面にしたい GV-USB2では、ゲーム画面を4 3で表示するのが基本です。ただ、PS3世代のゲーム機であれば16 9でゲーム画面を表示することもできます。 通常どおり、アマレコTVにゲーム画面を表示する。 ゲーム機の出力設定を変更して16 9にする(*6)。 アマレコTVの設定画面から「グラフ 2(プレビュー)」タブを開き、「アスペクト比」で「16 9」を選択する。 「OK」をクリックする。 さらに動画を投稿する場合は、以下のようにします。 録画を開始・停止する。 録画ファイルを再生すると縦長の映像になるが、それで正常。 動画をAviUtlで開く。 640x360(640x480ではない)にリサイズする(*7)。 動画を保存する。 動画を動画共有サイトに投稿する。 製品が認識されない 以下のページをご覧ください。 キャプチャーボードがPCに認識されない場合の対処法を参照 製品が不安定だ 以下のページをご覧ください。 キャプチャーボードが不安定な場合の対処法を参照 ▲画面の上へ その他 LightCaptureで録画中に行なう音量調整は、動画ファイルに影響しません。 静止画(スクリーンショット)を撮影したい場合は、Light Captureにあるカメラのアイコンをクリックします。 ▲画面の上へ 筆者がGV-USB2を使用した感想 I-O DATA ビデオ/VHS 8mm DVD ダビング パソコン取り込み ビデオキャプチャー 「アナレコ」 GV-USB2 posted with カエレバ アイ・オー・データ 2010-09-30 Amazon 楽天市場 よい点 定番製品という安心感がある。 S端子接続すれば、PS3でもそこそこの画質にはなる(アマレコTV使用時)。 PCの画面を見ながらでもゲームをプレイできる(多少違和感はある)。 製品は見た目以上に小さくて扱いやすい。 低スペックなPCでも通常は問題ない。 手軽に使えるので、入門用としていちばんお薦めできる。 レトロゲームをプレイするなら、これで必要十分。 悪い点 LightCapture(付属ソフト)ではアスペクト比を指定できない。 コンポジット端子やS端子の仕様上、画質は妥協すべき。 PS4やSwitchなどを接続できない(コンバーターが必要)。 ラグ対策がめんどう。 ▲画面の上へ 関連ページ コメント質問など キャプチャーボードの映像・音声が出ないときはキャプチャーソフト 上で 映像を表示できない、音声が聞こえない場合の対処法 AviUtlの使い方無料で使える!動画編集ソフトの決定版 ゲーム配信で必要になるものあらゆる配信サイトに対応!ゲーム配信で必要なものを準備しよう Skypeの通話音声を動画に入れる方法動画にSkypeの通話音声を入れるやり方、3パターンを解説 実況用PCマイク/こんなときはPC用マイクについてのFAQ ▲画面の上へ
https://w.atwiki.jp/reflec_beat/pages/1692.html
FUTURE FLIGHT アレンジはMaskaleido。 ジャケットはこの曲を収録した、2015/08/14頒布の「幻想あ・ら・もーどIV」より。 BASIC MEDIUM HARD Level 2 6 9 Objects 97 294 475 BPM - TIME - Artist SOUND HOLIC feat. Nana Takahashi Version VOLZZA Original 東方花映塚 風神少女 動画 攻略 名前 コメント ※攻略の際は、文頭に[BASIC] [MEDIUM] [HARD] [SPECIAL] のいずれかを置くと、どの譜面に関する情報かが分かりやすいです。 コメント(感想など) 名前 コメント ↑攻略と無関係の曲に対するコメントはこちらでお願いします。あまりにもかけ離れた内容は削除される場合があります。
https://w.atwiki.jp/idolish7tw/pages/798.html
千[LIGHT FUTURE] 稀有度 SHOUT BEAT MELODY SSR 6573 3876 3509 隊長技 隊伍的Shout值有100%機率大幅提高 魅力技能 尋覓下一個世界吧 效果 LV.1 Perfect判定每26次就有36%的機率使分數提高650 LV.2 Perfect判定每25次就有38%的機率使分數提高1137 LV.3 Perfect判定每24次就有40%的機率使分數提高1933 LV.4 Perfect判定每23次就有42%的機率使分數提高3287 [部分編集] 台詞 我會不斷展現出嶄新的色彩,讓觀眾席為之瘋狂。 取得方式 『LIGHT FUTURE』期間限定高級甄選登場!、2nd LIVE舉辦前! 『Road To Infinity』 & 『LIGHT FUTURE』復刻限定高級甄選開始!、4th Anniversary!!2種復刻限定高級甄選開跑!!、OVER/5Y 『LIGHT FUTURE』『CROSSING×US!』 復刻 限定高級甄選開始!! RC 第1話 LIGHT FUTURE 信賴度5%
https://w.atwiki.jp/idolish7tw/pages/797.html
百[LIGHT FUTURE] 稀有度 SHOUT BEAT MELODY SSR 6413 3919 3715 隊長技 隊伍的Shout值有100%機率大幅提高 魅力技能 只屬於自己的光輝 效果 LV.1 每過26秒就有37%的機率使判定範圍縮小3秒,並使分數提高1.2倍 LV.2 每過26秒就有38%的機率使判定範圍縮小4秒,並使分數提高1.3倍 LV.3 每過25秒就有38%的機率使判定範圍縮小4秒,並使分數提高1.4倍 LV.4 每過25秒就有39%的機率使判定範圍縮小4秒,並使分數提高1.5倍 [部分編集] 台詞 所以這次該輪到我,以那份光芒帶領可愛的晚輩們了! 取得方式 『LIGHT FUTURE』期間限定高級甄選登場!、2nd LIVE舉辦前! 『Road To Infinity』 & 『LIGHT FUTURE』復刻限定高級甄選開始!、4th Anniversary!!2種復刻限定高級甄選開跑!!、OVER/5Y 『LIGHT FUTURE』『CROSSING×US!』 復刻 限定高級甄選開始!! RC 第1話 LIGHT FUTURE 信賴度5%
https://w.atwiki.jp/touhoukashi/pages/2397.html
【登録タグ F Nana Takahashi SOUND HOLIC 幻想★あ・ら・もーど IV 曲 風神少女】 【注意】 現在、このページはJavaScriptの利用が一時制限されています。この表示状態ではトラック情報が正しく表示されません。 この問題は、以下のいずれかが原因となっています。 ページがAMP表示となっている ウィキ内検索からページを表示している これを解決するには、こちらをクリックし、ページを通常表示にしてください。 /** General styling **/ @font-face { font-family Noto Sans JP ; font-display swap; font-style normal; font-weight 350; src url(https //img.atwikiimg.com/www31.atwiki.jp/touhoukashi/attach/2972/10/NotoSansCJKjp-DemiLight.woff2) format( woff2 ), url(https //img.atwikiimg.com/www31.atwiki.jp/touhoukashi/attach/2972/9/NotoSansCJKjp-DemiLight.woff) format( woff ), url(https //img.atwikiimg.com/www31.atwiki.jp/touhoukashi/attach/2972/8/NotoSansCJKjp-DemiLight.ttf) format( truetype ); } @font-face { font-family Noto Sans JP ; font-display swap; font-style normal; font-weight bold; src url(https //img.atwikiimg.com/www31.atwiki.jp/touhoukashi/attach/2972/13/NotoSansCJKjp-Medium.woff2) format( woff2 ), url(https //img.atwikiimg.com/www31.atwiki.jp/touhoukashi/attach/2972/12/NotoSansCJKjp-Medium.woff) format( woff ), url(https //img.atwikiimg.com/www31.atwiki.jp/touhoukashi/attach/2972/11/NotoSansCJKjp-Medium.ttf) format( truetype ); } rt { font-family Arial, Verdana, Helvetica, sans-serif; } /** Main table styling **/ #trackinfo, #lyrics { font-family Noto Sans JP , sans-serif; font-weight 350; } .track_number { font-family Rockwell; font-weight bold; } .track_number after { content . ; } #track_args, .amp_text { display none; } #trackinfo { position relative; float right; margin 0 0 1em 1em; padding 0.3em; width 320px; border-collapse separate; border-radius 5px; border-spacing 0; background-color #F9F9F9; font-size 90%; line-height 1.4em; } #trackinfo th { white-space nowrap; } #trackinfo th, #trackinfo td { border none !important; } #trackinfo thead th { background-color #D8D8D8; box-shadow 0 -3px #F9F9F9 inset; padding 4px 2.5em 7px; white-space normal; font-size 120%; text-align center; } .trackrow { background-color #F0F0F0; box-shadow 0 2px #F9F9F9 inset, 0 -2px #F9F9F9 inset; } #trackinfo td ul { margin 0; padding 0; list-style none; } #trackinfo li { line-height 16px; } #trackinfo li nth-of-type(n+2) { margin-top 6px; } #trackinfo dl { margin 0; } #trackinfo dt { font-size small; font-weight bold; } #trackinfo dd { margin-left 1.2em; } #trackinfo dd + dt { margin-top .5em; } #trackinfo_help { position absolute; top 3px; right 8px; font-size 80%; } /** Media styling **/ #trackinfo .media th { background-color #D8D8D8; padding 4px 0; font-size 95%; text-align center; } .media td { padding 0 2px; } .media iframe nth-of-type(n+2) { margin-top 0.3em; } .youtube + .nicovideo, .youtube + .soundcloud, .nicovideo + .soundcloud { margin-top 0.75em; } .media_section { display flex; align-items center; text-align center; } .media_section before, .media_section after { display block; flex-grow 1; content ; height 1px; } .media_section before { margin-right 0.5em; background linear-gradient(-90deg, #888, transparent); } .media_section after { margin-left 0.5em; background linear-gradient(90deg, #888, transparent); } .media_notice { color firebrick; font-size 77.5%; } /** Around track styling **/ .next-track { float right; } /** Infomation styling **/ #trackinfo .info_header th { padding .3em .5em; background-color #D8D8D8; font-size 95%; } #trackinfo .infomation_show_btn_wrapper { float right; font-size 12px; user-select none; } #trackinfo .infomation_show_btn { cursor pointer; } #trackinfo .info_content td { padding 0 0 0 5px; height 0; transition .3s; } #trackinfo .info_content ul { padding 0; margin 0; max-height 0; list-style initial; transition .3s; } #trackinfo .info_content li { opacity 0; visibility hidden; margin 0 0 0 1.5em; transition .3s, opacity .2s; } #trackinfo .info_content.infomation_show td { padding 5px; height 100%; } #trackinfo .info_content.infomation_show ul { padding 5px 0; max-height 50em; } #trackinfo .info_content.infomation_show li { opacity 1; visibility visible; } #trackinfo .info_content.infomation_show li nth-of-type(n+2) { margin-top 10px; } /** Lyrics styling **/ #lyrics { font-size 1.06em; line-height 1.6em; } .not_in_card, .inaudible { display inline; position relative; } .not_in_card { border-bottom dashed 1px #D0D0D0; } .tooltip { display flex; visibility hidden; position absolute; top -42.5px; left 0; width 275px; min-height 20px; max-height 100px; padding 10px; border-radius 5px; background-color #555; align-items center; color #FFF; font-size 85%; line-height 20px; text-align center; white-space nowrap; opacity 0; transition 0.7s; -webkit-user-select none; -moz-user-select none; -ms-user-select none; user-select none; } .inaudible .tooltip { top -68.5px; } span hover + .tooltip { visibility visible; top -47.5px; opacity 0.8; transition 0.3s; } .inaudible span hover + .tooltip { top -73.5px; } .not_in_card span.hide { top -42.5px; opacity 0; transition 0.7s; } .inaudible .img { display inline-block; width 3.45em; height 1.25em; margin-right 4px; margin-bottom -3.5px; margin-left 4px; background-image url(https //img.atwikiimg.com/www31.atwiki.jp/touhoukashi/attach/2971/7/Inaudible.png); background-size contain; background-repeat no-repeat; } .not_in_card after, .inaudible .img after { content ; visibility hidden; position absolute; top -8.5px; left 42.5%; border-width 5px; border-style solid; border-color #555 transparent transparent transparent; opacity 0; transition 0.7s; } .not_in_card hover after, .inaudible .img hover after { content ; visibility visible; top -13.5px; left 42.5%; opacity 0.8; transition 0.3s; } .not_in_card after { top -2.5px; left 50%; } .not_in_card hover after { top -7.5px; left 50%; } .not_in_card.hide after { visibility hidden; top -2.5px; opacity 0; transition 0.7s; } /** For mobile device styling **/ .uk-overflow-container { display inline; } #trackinfo.mobile { display table; float none; width 100%; margin auto; margin-bottom 1em; } #trackinfo.mobile th { text-transform none; } #trackinfo.mobile tbody tr not(.media) th { text-align left; background-color unset; } #trackinfo.mobile td { white-space normal; } document.addEventListener( DOMContentLoaded , function() { use strict ; const headers = { title アルバム別曲名 , album アルバム , circle サークル , vocal Vocal , lyric Lyric , chorus Chorus , narrator Narration , rap Rap , voice Voice , whistle Whistle (口笛) , translate Translation (翻訳) , arrange Arrange , artist Artist , bass Bass , cajon Cajon (カホン) , drum Drum , guitar Guitar , keyboard Keyboard , mc MC , mix Mix , piano Piano , sax Sax , strings Strings , synthesizer Synthesizer , trumpet Trumpet , violin Violin , original 原曲 , image_song イメージ曲 }; const rPagename = /(?=^|.*
https://w.atwiki.jp/bioshock/pages/30.html
1960 Mid-Atlantic 1960年、大西洋上 (Airplane) Jack お前は特別な子だと、親はそう言っていた。 生まれながらに大きなことをなす人間だからと。 そいつはまあ、正しかったわけだ。 Andrew Ryan I am Andrew Ryan and I m hear to ask you a question Is a man not entitled to the sweat of his brow? No,says the man in Washington.It belongs to the poor.No,says the man in the Vatican.It belongs to God.No,says the man is Moscow.It belongs to everyone.I rejected those answers.Instead,I chose something different.I chose the impossible.I chose...Rapture.Acity where the artist would not fear censor.Where the scientist would not be boud by petty morality.Where the great would not be constrained by the small.And with the sweat of your brow,Raputure can become your city as well. (Bathysphere) Andrew Ryan 私はAndrew Ryan。ここで一つ、君に尋ねよう。 人は、己が額に汗した対価を享受し得ないのだろうか? 然り、とワシントンの者は言う。それは貧者の許に帰すると。 然り、とバチカンの者は言う。それは神の許に帰すると。 然り、とモスクワの者は言う。それは全体の許に帰するのだと。 私はそうした答えを拒み、代わりに選んだ。 異なる道を、有り得ぬものを… Raptureを。 それは芸術家が検閲を恐れず、科学者が瑣末な倫理に縛られず、 鴻鵠が燕雀に阻まれぬ街。そして君自身額に汗するのなら 君の場所にもなり得る街だ。 Atlas ...but the lighthouse is all lit up like hellfire...looks like some kind of plane crash... Johnny ...we re in the middle of the Atlantic Ocean...How could it- Atlas ...Dunno,you best get over there,and be quick about it...The splicers are coming... Johnny You ve gotta be kidding-How do you know someone s even coming? Atlas Couse we got a bothysphere on its way down...That means we ve got company. Johnny O-okay,just one more minute...The sphere-the sphere is coming up now... Atlas Johnny,security s banging off all over...get a move on! Johnny Please,lady...I didin t mean no trespass.Just dont t hurt me... Johnny Just let me go...you can keep my gun.You can-- Johnny (scream) (death gurgle) Splicer - Female (Breathing heavy) Splicer - Female Is it someone new? Splicer - Female (shriek of rage) Splicer - Female (sounds of exertion) Splicer - Female (shout of frustration) Atlas Would you kindly pick uo that shortwave radio? Atlas Grab that shortwave now.That splicer s out there,still. Atlas …しかし灯台が明々とまるで業火だ… 見たところ飛行機が墜落したとかそういう… Johny ——大西洋のど真ん中なんだぞ…。何だってそんな—— Atlas …知らんよ、行って来てくれ、急ぐんだぞ。splicerが近付いてる… Johny ふざけろ。——そもそも誰か向かってるなんてどうして分かる? Atlas 降りて来る潜水球があるからだよ…。つまりお仲間が来るんだ。 Johny わ——分かった、もうちょっと待て…。 潜水球だ——潜水球が上がって来た… Atlas Johny、セキュリティは丸ごと吹っ飛んでるんだ…早くしろ! (Bathysphere Station) Johny どうか、奥さん…邪魔するつもりじゃなかったんです。痛くしないで…。 見逃してくださいよ…銃なら渡します。これも——(悲鳴)(嘔吐く) Splicer Female (荒い息)これ新入り? (甲高い怒号) (騒ぎ立てる物音) (苛立った叫び声) Atlas そこの短波無線を取ってくれないか、頼んだぞ。 Atlas 無線を取れったら。さっきのがまだうろうろしてるんだぞ。 Atlas I don t know how you survived that plane crash,but I ve never been one to question Providence.I m Atlas,and I aim to keep you alive.Now keep on Moving...we re gonna have to get you to higher ground. Atlas-Move To Higher Ground あの墜落事故でどうやって生還したかは知らないが、神の思し召しってのを 疑う気はないな。私はAtlas、君には生き延びてもらいたいと考えている。 ほら動くんだ…もっと上の階層に行ってもらう必要がある。 Atlas Take a deep breath and step out of the bathysphere.I won t leave you twisting in the wind. Atlas-Leave The Bathysphere 深呼吸して潜水球から一歩踏み出すんだ。迷ってる暇はないと思ってくれ。 Female Splicer I ll wrap you in a sheet... Splicer-Female おお、簀巻きにしてやろうか。 Atlas We re gonna need to draw her out of hiding.But you re gonna have to trust me. Atlas-Draw Her Out 彼女に出て来てもらわないと。とは言え君が私を信頼してくれないことにはな。 Atlas Just a bit further...how do you like that,sister? Atlas-Smile For The Camera もう少しだけ先へ…そいつはいかがかな、姐さん? Atlas Now would you kindly find a crowbar or something? Bloody splicers sealed Johnny in before they...goddamn splicers. Atlas-Find A Weapon じゃあ頼んだぞ、バールのようなものがあるかい? splicerの奴らJohnyの逃げ道を塞いで、それから…畜生。 Atlas Steady now! Your genetic code is being rewritten- just hold on and everything will be fine. Atlas-Genetic Code Rewritten 落ち着け!遺伝情報が書き換えられているんだ—— じっとしてればすぐ何でもなくなる。 Splicer One This little fish looks like he just had his cherry POPPED...wonder if he s got still got some Adam on him? Splicer two You hear that? Let s bug! Splicer one Weak! You re a weak chopper! Splicer two This little fish ain t worth toeing it with no Big Daddy! Splicer one Yellow! Always have been! You ll be no better off with the metal daddy,littel fish.See you flooting in the briney... (Lounge) Splicer One こっちの新子はさっきまでおぼこだったみてえだ… Adamはまだ入ってんかな? Splicer Two 聞こえるか?退散だ! Splicer One 腰抜け!この根性無し! Splicer Two こんなんでBig Daddyに突っ掛かってちゃ割に合わねえ! Splicer-Male 玉無しめ!いつもそうだ! あん金臭い旦那は楽じゃあねえ。次会う時は海の藻屑さ… Little Sister Look Mr.Bubbles,it s an angel- I can see light coming from his belly...wait a minute.he s still breathing.It s alright,I know he ll be an angel soon. Little Sister 見てMr Bubbles、天使よ——おなかのとこが光ってる… 待って、まだ息してる。平気よ、だってすぐ天使になるもの。 Atlas You all right,boyo? First time plasmid s a real kick from a mule.But...there s nothing like a fistful of lightning.now,is there? Atlas-You All Right? 大丈夫か、君?初めてのplasmidはえらく効くんだ。 だが拳に火花を一握りなんてことになってるんじゃないか? Atlas Splicer! Give em the combo- zap em then whack em.One-two punch! Remember,the one-two punch! Atlas-One Two Punch splicerだ!連続技をくれてやれ——びりっと一発、でそれからがつんだ。 ワンツーだぞ!良いか、ワンツーだ! Atlas Listen- I ve got a family.I need to get them out of here.But the splicers have cut me off from them- If you can reach them in Neptune s Bounty,them maybe,just maybe- I know you must feel like the unluckiest man in the world right now,but you re the only hope I ll ever see my wife and child again.Go to Neptune s Bounty...find my family...please. Atlas-Go To Neptune s Bounty 聞いてくれ——私には家族がいる。ここから連れて出なければならない。 なのにsplicerに引き離されてしまっている——Neptune s Bountyにいる家族の ところに辿り着けば、そうすれば多分、ことによれば——君が今まさに世界一 ついてない気分でいるに違いないのは分かるよ、だが君は、今一度だけでも 妻と息子に会えるたった一つの私の希望なんだ。Neptune s Bountyに行き… 家族を見付けてくれ…お願いだ。 Atlas Plasmids changed everything.They destroyed out bodies,our minds.We couldn t handle it.Best friends butchering one another,babies strangled in cribs.The whole city went to hell. Atlas-Overdoing Plasmids plasmidが何もかもを変えた。私たちの肉体を、精神を破壊したんだ。 私たちは使いこなせなかった。親友同士がなぶり殺し合い、赤ん坊が 寝床でくびり殺される。街ぐるみで発狂したんだよ。 Atlas Careful now...would you kindly lower that weapon for a minute? Atlas-Lowe Weapon 慎重に…頼んだぞ、しばらく武器を下ろしていてくれ。 Atlas You think that s a child down there? Don t be fooled.She s a Little Sister now.Somebody went and turned a sweat baby girl into a monster.Whatever you thought about right and wrong on the surface,well that don t count for much down in Rapture.Those Little Sisters,they carry Adam- the genetic material that keeps the wheels of Rapture turning.Everybody wants it.Everybody needs it. Atlas-Little Sister 子どもが一人下にいる、と思ってるな?乗せられるなよ。その子はもう Little Sisterなんだ。あどけない少女を何者かが怪物に変えてしまった。 地上で善悪をどう捉えてたにしろ、Raptureじゃ大して役には立たないよ。 Little SisterたちはAdamを運ぶ——Raptureの歯車を回し続けている 遺伝物質だ。誰もがそれを欲している。誰もが必要としているんだ。 Atlas That s a Big Daddy.She gathers Adam,he keeps her safe. Atlas-Big Daddy あれがBig Daddy。その子がAdamを集め、彼がその無事を請け負ってるんだ。 Atlas If you spot a splicer in the water,hit em with the Electro Bolt. Atlas-Electro Bolt In Water splicerが水辺にいるのを見掛けたら、Electro Boltを当ててやれ。 Anoounser Security alert in progress. (Transit Hub) Announcer 警備警報発令中。警備警報発令中。 Atlas It s Ryan! Goddamn Andrew Ryan! He found us! Damnit! He s shut off acces to Neptune...there s another way to get there...head to Medical! What are you waiting for? Go! Atlas-Andrew Ryan Ryanだ!Andrew Ryanの野郎だよ!見付かったんだ!畜生! Neptuneへの通路が封鎖された…道はもう一つあるが… Medicalに向かえ!何してる!行け! Atlas Ah,Christ! You re trapped...gonna try to override the exit from here! Atlas-Override Exit ああ、何だと!閉じ込められたんだ… こっちで割り込みを掛けて出口を開けてみよう! Andrew Ryan So tell me,friend...which one off the bitches sent you? The KGB wplf? OR the CIA jacksl? Here s the news Raputure isn t some sunken ship for you to plunder and Andrew Ryan isn t a giddy socialite who can be slapped around by government muscle.And whith that,farewell,or Dasvadinya.Whichever you prefer. (To Medical Pavilion) Andrew Ryan さあ聞こう、輩(ともがら)よ…どの犬畜生に言われて来た? 道外れたKGB?太鼓持ちのCIA?言伝てだ。Raptureはお前たちが漁りに 来るような沈没船でなければ、Andrew Ryanは政府の横暴に張り倒される 浮わついたお大尽でもない。ではこれで、さらばだ、 それともダスビダーニャ、か。いずれとも好きにしろ。 Atlas I got it...get out of there...get our now! Atlas-Get Out Of There できたぞ…そこから出ろ…出るんだ!
https://w.atwiki.jp/touhoukashi/pages/1843.html
【登録タグ Innocent Days N たま 妖怪裏参道 曲 魂音泉】 【注意】 現在、このページはJavaScriptの利用が一時制限されています。この表示状態ではトラック情報が正しく表示されません。 この問題は、以下のいずれかが原因となっています。 ページがAMP表示となっている ウィキ内検索からページを表示している これを解決するには、こちらをクリックし、ページを通常表示にしてください。 /** General styling **/ @font-face { font-family Noto Sans JP ; font-display swap; font-style normal; font-weight 350; src url(https //img.atwikiimg.com/www31.atwiki.jp/touhoukashi/attach/2972/10/NotoSansCJKjp-DemiLight.woff2) format( woff2 ), url(https //img.atwikiimg.com/www31.atwiki.jp/touhoukashi/attach/2972/9/NotoSansCJKjp-DemiLight.woff) format( woff ), url(https //img.atwikiimg.com/www31.atwiki.jp/touhoukashi/attach/2972/8/NotoSansCJKjp-DemiLight.ttf) format( truetype ); } @font-face { font-family Noto Sans JP ; font-display swap; font-style normal; font-weight bold; src url(https //img.atwikiimg.com/www31.atwiki.jp/touhoukashi/attach/2972/13/NotoSansCJKjp-Medium.woff2) format( woff2 ), url(https //img.atwikiimg.com/www31.atwiki.jp/touhoukashi/attach/2972/12/NotoSansCJKjp-Medium.woff) format( woff ), url(https //img.atwikiimg.com/www31.atwiki.jp/touhoukashi/attach/2972/11/NotoSansCJKjp-Medium.ttf) format( truetype ); } rt { font-family Arial, Verdana, Helvetica, sans-serif; } /** Main table styling **/ #trackinfo, #lyrics { font-family Noto Sans JP , sans-serif; font-weight 350; } .track_number { font-family Rockwell; font-weight bold; } .track_number after { content . ; } #track_args, .amp_text { display none; } #trackinfo { position relative; float right; margin 0 0 1em 1em; padding 0.3em; width 320px; border-collapse separate; border-radius 5px; border-spacing 0; background-color #F9F9F9; font-size 90%; line-height 1.4em; } #trackinfo th { white-space nowrap; } #trackinfo th, #trackinfo td { border none !important; } #trackinfo thead th { background-color #D8D8D8; box-shadow 0 -3px #F9F9F9 inset; padding 4px 2.5em 7px; white-space normal; font-size 120%; text-align center; } .trackrow { background-color #F0F0F0; box-shadow 0 2px #F9F9F9 inset, 0 -2px #F9F9F9 inset; } #trackinfo td ul { margin 0; padding 0; list-style none; } #trackinfo li { line-height 16px; } #trackinfo li nth-of-type(n+2) { margin-top 6px; } #trackinfo dl { margin 0; } #trackinfo dt { font-size small; font-weight bold; } #trackinfo dd { margin-left 1.2em; } #trackinfo dd + dt { margin-top .5em; } #trackinfo_help { position absolute; top 3px; right 8px; font-size 80%; } /** Media styling **/ #trackinfo .media th { background-color #D8D8D8; padding 4px 0; font-size 95%; text-align center; } .media td { padding 0 2px; } .media iframe nth-of-type(n+2) { margin-top 0.3em; } .youtube + .nicovideo, .youtube + .soundcloud, .nicovideo + .soundcloud { margin-top 0.75em; } .media_section { display flex; align-items center; text-align center; } .media_section before, .media_section after { display block; flex-grow 1; content ; height 1px; } .media_section before { margin-right 0.5em; background linear-gradient(-90deg, #888, transparent); } .media_section after { margin-left 0.5em; background linear-gradient(90deg, #888, transparent); } .media_notice { color firebrick; font-size 77.5%; } /** Around track styling **/ .next-track { float right; } /** Infomation styling **/ #trackinfo .info_header th { padding .3em .5em; background-color #D8D8D8; font-size 95%; } #trackinfo .infomation_show_btn_wrapper { float right; font-size 12px; user-select none; } #trackinfo .infomation_show_btn { cursor pointer; } #trackinfo .info_content td { padding 0 0 0 5px; height 0; transition .3s; } #trackinfo .info_content ul { padding 0; margin 0; max-height 0; list-style initial; transition .3s; } #trackinfo .info_content li { opacity 0; visibility hidden; margin 0 0 0 1.5em; transition .3s, opacity .2s; } #trackinfo .info_content.infomation_show td { padding 5px; height 100%; } #trackinfo .info_content.infomation_show ul { padding 5px 0; max-height 50em; } #trackinfo .info_content.infomation_show li { opacity 1; visibility visible; } #trackinfo .info_content.infomation_show li nth-of-type(n+2) { margin-top 10px; } /** Lyrics styling **/ #lyrics { font-size 1.06em; line-height 1.6em; } .not_in_card, .inaudible { display inline; position relative; } .not_in_card { border-bottom dashed 1px #D0D0D0; } .tooltip { display flex; visibility hidden; position absolute; top -42.5px; left 0; width 275px; min-height 20px; max-height 100px; padding 10px; border-radius 5px; background-color #555; align-items center; color #FFF; font-size 85%; line-height 20px; text-align center; white-space nowrap; opacity 0; transition 0.7s; -webkit-user-select none; -moz-user-select none; -ms-user-select none; user-select none; } .inaudible .tooltip { top -68.5px; } span hover + .tooltip { visibility visible; top -47.5px; opacity 0.8; transition 0.3s; } .inaudible span hover + .tooltip { top -73.5px; } .not_in_card span.hide { top -42.5px; opacity 0; transition 0.7s; } .inaudible .img { display inline-block; width 3.45em; height 1.25em; margin-right 4px; margin-bottom -3.5px; margin-left 4px; background-image url(https //img.atwikiimg.com/www31.atwiki.jp/touhoukashi/attach/2971/7/Inaudible.png); background-size contain; background-repeat no-repeat; } .not_in_card after, .inaudible .img after { content ; visibility hidden; position absolute; top -8.5px; left 42.5%; border-width 5px; border-style solid; border-color #555 transparent transparent transparent; opacity 0; transition 0.7s; } .not_in_card hover after, .inaudible .img hover after { content ; visibility visible; top -13.5px; left 42.5%; opacity 0.8; transition 0.3s; } .not_in_card after { top -2.5px; left 50%; } .not_in_card hover after { top -7.5px; left 50%; } .not_in_card.hide after { visibility hidden; top -2.5px; opacity 0; transition 0.7s; } /** For mobile device styling **/ .uk-overflow-container { display inline; } #trackinfo.mobile { display table; float none; width 100%; margin auto; margin-bottom 1em; } #trackinfo.mobile th { text-transform none; } #trackinfo.mobile tbody tr not(.media) th { text-align left; background-color unset; } #trackinfo.mobile td { white-space normal; } document.addEventListener( DOMContentLoaded , function() { use strict ; const headers = { title アルバム別曲名 , album アルバム , circle サークル , vocal Vocal , lyric Lyric , chorus Chorus , narrator Narration , rap Rap , voice Voice , whistle Whistle (口笛) , translate Translation (翻訳) , arrange Arrange , artist Artist , bass Bass , cajon Cajon (カホン) , drum Drum , guitar Guitar , keyboard Keyboard , mc MC , mix Mix , piano Piano , sax Sax , strings Strings , synthesizer Synthesizer , trumpet Trumpet , violin Violin , original 原曲 , image_song イメージ曲 }; const rPagename = /(?=^|.*