aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Input/in_linein
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Plugins/Input/in_linein')
-rw-r--r--Src/Plugins/Input/in_linein/LineIn.cpp50
-rw-r--r--Src/Plugins/Input/in_linein/LineIn.h25
-rw-r--r--Src/Plugins/Input/in_linein/audio.cpp113
-rw-r--r--Src/Plugins/Input/in_linein/audio.h11
-rw-r--r--Src/Plugins/Input/in_linein/in_linein.cpp191
-rw-r--r--Src/Plugins/Input/in_linein/in_linein.rc82
-rw-r--r--Src/Plugins/Input/in_linein/in_linein.sln30
-rw-r--r--Src/Plugins/Input/in_linein/in_linein.vcxproj248
-rw-r--r--Src/Plugins/Input/in_linein/in_linein.vcxproj.filters44
-rw-r--r--Src/Plugins/Input/in_linein/main.h7
-rw-r--r--Src/Plugins/Input/in_linein/resource.h22
-rw-r--r--Src/Plugins/Input/in_linein/version.rc239
12 files changed, 862 insertions, 0 deletions
diff --git a/Src/Plugins/Input/in_linein/LineIn.cpp b/Src/Plugins/Input/in_linein/LineIn.cpp
new file mode 100644
index 00000000..073761af
--- /dev/null
+++ b/Src/Plugins/Input/in_linein/LineIn.cpp
@@ -0,0 +1,50 @@
+#include "LineIn.h"
+#include "main.h"
+#include "audio.h"
+int LineIn::Play()
+{
+ paused = false;
+ posinms = 0;
+ line.is_seekable = 0;
+ line.SetInfo(44*4*8, 44, 2, 1);
+ line.SAVSAInit(0, 44100);
+ line.VSASetInfo(2, 44100);
+ {
+ short dta[576*2] = {0, };
+ line.VSAAddPCMData(dta, 2, 16, 0);
+ line.SAAddPCMData(dta, 2, 16, 0);
+ }
+ if (audioInit(1))
+ {}
+ return 0;
+}
+
+void LineIn::Stop()
+{
+ audioQuit();
+}
+
+void LineIn::Pause()
+{
+ posinms = audioGetPos();
+ audioPause(1);
+ paused = true;
+}
+
+void LineIn::Unpause()
+{
+ audioPause(0);
+ paused = false;
+}
+
+int LineIn::GetLength()
+{
+ return -1000;
+}
+
+int LineIn::GetOutputTime()
+{
+ if (paused)
+ return posinms;
+ return audioGetPos();
+}
diff --git a/Src/Plugins/Input/in_linein/LineIn.h b/Src/Plugins/Input/in_linein/LineIn.h
new file mode 100644
index 00000000..febf7934
--- /dev/null
+++ b/Src/Plugins/Input/in_linein/LineIn.h
@@ -0,0 +1,25 @@
+#ifndef NULLSOFT_LINEINH
+#define NULLSOFT_LINEINH
+
+class LineIn
+{
+public:
+ LineIn() : posinms(0), paused(false)
+ {}
+ int Play();
+ void Stop();
+ void Pause();
+ void Unpause();
+ int GetLength();
+ int GetOutputTime();
+ bool IsPaused() { return paused; }
+ void SetOutputTime(int time_in_ms)
+{}
+ void SetVolume(int a_v, int a_p)
+ {}
+private:
+ int posinms;
+ bool paused;
+};
+
+#endif \ No newline at end of file
diff --git a/Src/Plugins/Input/in_linein/audio.cpp b/Src/Plugins/Input/in_linein/audio.cpp
new file mode 100644
index 00000000..4ab2472c
--- /dev/null
+++ b/Src/Plugins/Input/in_linein/audio.cpp
@@ -0,0 +1,113 @@
+#include <windows.h>
+#include "Audio.h"
+#include "main.h"
+#pragma intrinsic(memcpy, memset)
+static int start_clock,paused;
+static HWAVEIN hWaveIn;
+static unsigned short data_latest[576*2];
+static unsigned short data_buffers[2][576*2];
+static WAVEHDR wave_hdrs[2];
+static HANDLE hThread;
+static int done;
+static int Thread(int *a);
+static int a_v=128, a_p=0;
+int initted;
+
+int audioInit(int sample)
+{
+ int x;
+ WAVEFORMATEX wft;
+ int threadid;
+ start_clock=GetTickCount();
+ paused=0;
+ if (!sample) return initted=0;
+ wft.wFormatTag = WAVE_FORMAT_PCM;
+ wft.nChannels = 2;
+ wft.nSamplesPerSec = 44100;
+ wft.nBlockAlign = 2*2;
+ wft.nAvgBytesPerSec = wft.nSamplesPerSec*wft.nBlockAlign;
+ wft.wBitsPerSample = 16;
+ wft.cbSize = 0;
+ if (waveInOpen(&hWaveIn,WAVE_MAPPER,&wft,0,0,0) != MMSYSERR_NOERROR)
+ {
+ return 1;
+ }
+ for (x = 0; x < 2; x ++)
+ {
+ memset(&wave_hdrs[x],0,sizeof(wave_hdrs[x]));
+ wave_hdrs[x].lpData = (char *) data_buffers[x];
+ wave_hdrs[x].dwBufferLength = 576*2*sizeof(short);
+ waveInPrepareHeader(hWaveIn,&wave_hdrs[x],sizeof(wave_hdrs[0]));
+ waveInAddBuffer(hWaveIn,&wave_hdrs[x],sizeof(wave_hdrs[0]));
+ }
+ initted=1;
+ done=0;
+ waveInStart(hWaveIn);
+ hThread = CreateThread(NULL,0,(unsigned long (__stdcall *)(void*)) Thread,&done,0,(unsigned long *)&threadid);
+ //SetThreadPriority(hThread,THREAD_PRIORITY_HIGHEST);
+ return 0;
+}
+
+void audioPause(int s)
+{
+ if (s)
+ {
+ if (!paused)
+ {
+ paused=1;
+ if (initted) waveInStop(hWaveIn);
+ start_clock = GetTickCount()-start_clock;
+ }
+ }
+ else
+ {
+ if (paused)
+ {
+ if (initted) waveInStart(hWaveIn);
+ start_clock=GetTickCount()-start_clock;
+ paused=0;
+ }
+ }
+}
+
+void audioQuit()
+{
+ if (!initted) return;
+ done=1;
+ WaitForSingleObject(hThread,INFINITE);
+ waveInStop(hWaveIn);
+ waveInReset(hWaveIn);
+ while (waveInClose(hWaveIn) == WAVERR_STILLPLAYING) Sleep(10);
+ CloseHandle(hThread);
+}
+
+int audioGetPos()
+{
+ if (paused) return start_clock;
+ return GetTickCount()-start_clock;
+}
+
+
+void audioSetPos(int ms)
+{
+ start_clock = GetTickCount()-ms;
+}
+
+static int Thread(int *a)
+{
+ int w;
+ while (!*a)
+ {
+ Sleep(10);
+ if (wave_hdrs[0].dwFlags & WHDR_DONE) w=0;
+ else if (wave_hdrs[1].dwFlags & WHDR_DONE) w=1;
+ else continue;
+ memcpy(data_latest,wave_hdrs[w].lpData,576*2*sizeof(short));
+ wave_hdrs[w].dwFlags=WHDR_PREPARED;
+ waveInAddBuffer(hWaveIn,&wave_hdrs[w],sizeof(wave_hdrs[0]));
+// memset(data_latest,0,576*2*sizeof(short));
+ line.VSAAddPCMData(data_latest,2,16,0);
+ line.SAAddPCMData(data_latest,2,16,0);
+ }
+ return 0;
+}
diff --git a/Src/Plugins/Input/in_linein/audio.h b/Src/Plugins/Input/in_linein/audio.h
new file mode 100644
index 00000000..7c7213e6
--- /dev/null
+++ b/Src/Plugins/Input/in_linein/audio.h
@@ -0,0 +1,11 @@
+#ifndef NULLSOFT_AUDIOH
+#define NULLSOFT_AUDIOH
+
+int audioInit(int);
+int audioGetPos();
+void audioSetPos(int ms);
+void audioGetWaveform(unsigned short data[576*2]);
+void audioQuit();
+void audioPause(int s);
+
+#endif \ No newline at end of file
diff --git a/Src/Plugins/Input/in_linein/in_linein.cpp b/Src/Plugins/Input/in_linein/in_linein.cpp
new file mode 100644
index 00000000..1b2eda2b
--- /dev/null
+++ b/Src/Plugins/Input/in_linein/in_linein.cpp
@@ -0,0 +1,191 @@
+#define PLUGIN_NAME "Nullsoft LineIn Plug-in"
+#define PLUGIN_VERSION L"3.16"
+
+#include "main.h"
+#include <windows.h>
+#include "LineIn.h"
+#include <api/service/waServiceFactory.h>
+#include "../Agave/Language/api_language.h"
+#include "../winamp/wa_ipc.h"
+#include "resource.h"
+
+// wasabi based services for localisation support
+api_language *WASABI_API_LNG = 0;
+HINSTANCE WASABI_API_LNG_HINST = 0, WASABI_API_ORIG_HINST = 0;
+
+int lstrcmpni(const char *a, const char *b, int count)
+{
+ if (!a || !b) return -1;
+
+ switch (CompareStringA(LOCALE_USER_DEFAULT, NORM_IGNORECASE, a, min(lstrlenA(a),count), b, min(lstrlenA(b),count)))
+ {
+ case CSTR_LESS_THAN: return -1;
+ case CSTR_GREATER_THAN: return 1;
+ case CSTR_EQUAL: return 0;
+ }
+ return -1;
+}
+LineIn lineIn;
+
+int DoAboutMessageBox(HWND parent, wchar_t* title, wchar_t* message)
+{
+ MSGBOXPARAMSW msgbx = {sizeof(MSGBOXPARAMSW),0};
+ msgbx.lpszText = message;
+ msgbx.lpszCaption = title;
+ msgbx.lpszIcon = MAKEINTRESOURCEW(102);
+ msgbx.hInstance = GetModuleHandle(0);
+ msgbx.dwStyle = MB_USERICON;
+ msgbx.hwndOwner = parent;
+ return MessageBoxIndirectW(&msgbx);
+}
+
+void about(HWND hwndParent)
+{
+ wchar_t message[1024] = {0}, text[1024] = {0};
+ WASABI_API_LNGSTRINGW_BUF(IDS_NULLSOFT_LINEIN_PLUGIN_OLD,text,1024);
+ wsprintfW(message, WASABI_API_LNGSTRINGW(IDS_ABOUT_TEXT),
+ line.description, __DATE__);
+ DoAboutMessageBox(hwndParent,text,message);
+}
+
+int init()
+{
+ if (!IsWindow(line.hMainWindow))
+ return IN_INIT_FAILURE;
+
+ waServiceFactory *sf = line.service->service_getServiceByGuid(languageApiGUID);
+ if (sf) WASABI_API_LNG = reinterpret_cast<api_language*>(sf->getInterface());
+
+ // need to have this initialised before we try to do anything with localisation features
+ WASABI_API_START_LANG(line.hDllInstance,InLineInLangGUID);
+
+ static wchar_t szDescription[256];
+ swprintf(szDescription,256,WASABI_API_LNGSTRINGW(IDS_NULLSOFT_LINEIN_PLUGIN),PLUGIN_VERSION);
+ line.description = (char*)szDescription;
+ return IN_INIT_SUCCESS;
+}
+
+void quit() {}
+
+int play(const char *fn)
+{
+ line.is_seekable=0;
+ if (!lstrcmpni(fn, "linein://", 9))
+ {
+ lineIn.Play();
+ return 0;
+ }
+ return 1;
+}
+
+int isourfile(const char *fn)
+{
+ if (!lstrcmpni(fn, "linein://", 9)) return 1;
+ return 0;
+}
+
+void pause()
+{
+ lineIn.Pause();
+}
+
+void unpause()
+{
+ lineIn.Unpause();
+}
+
+int ispaused()
+{
+ return lineIn.IsPaused();
+}
+
+void stop()
+{
+ lineIn.Stop();
+ line.SAVSADeInit();
+}
+
+int getlength()
+{
+ return lineIn.GetLength();
+}
+
+int getoutputtime()
+{
+ return lineIn.GetOutputTime();
+}
+void setoutputtime(int time_in_ms)
+{}
+
+void setvolume(int volume)
+{
+ line.outMod->SetVolume(volume);
+}
+
+void setpan(int pan)
+{
+ line.outMod->SetPan(pan);
+}
+
+int infoDlg(const char *fn, HWND hwnd)
+{
+ return 0;
+}
+
+void getfileinfo(const char *filename, char *title, int *length_in_ms)
+{
+ if (length_in_ms)
+ *length_in_ms = -1000;
+ if (title)
+ WASABI_API_LNGSTRING_BUF(IDS_LINE_INPUT,title,GETFILEINFO_TITLE_LENGTH);
+}
+
+void eq_set(int on, char data[10], int preamp)
+{}
+
+In_Module line =
+ {
+ IN_VER_RET,
+ "nullsoft(in_line.dll)",
+ 0, // hMainWindow
+ 0, // hDllInstance
+ "",
+ 0, // is_seekable
+ //0, // uses output plugins
+ 1, // uses output plugins
+ about,
+ about,
+ init,
+ quit,
+ getfileinfo,
+ infoDlg,
+ isourfile,
+ play,
+ pause,
+ unpause,
+ ispaused,
+ stop,
+ getlength,
+ getoutputtime,
+ setoutputtime,
+ setvolume,
+ setpan,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, // dsp shit
+ eq_set,
+ NULL, // setinfo
+ NULL // out_mod
+ };
+
+BOOL APIENTRY DllMain(HANDLE hMod, DWORD r, void*)
+{
+ if (r == DLL_PROCESS_ATTACH)
+ DisableThreadLibraryCalls((HMODULE)hMod);
+
+ return TRUE;
+}
+
+extern "C" __declspec( dllexport ) In_Module * winampGetInModule2()
+{
+ return &line;
+} \ No newline at end of file
diff --git a/Src/Plugins/Input/in_linein/in_linein.rc b/Src/Plugins/Input/in_linein/in_linein.rc
new file mode 100644
index 00000000..c9d5b3b1
--- /dev/null
+++ b/Src/Plugins/Input/in_linein/in_linein.rc
@@ -0,0 +1,82 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "#include ""version.rc2""\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE
+BEGIN
+ IDS_NULLSOFT_LINEIN_PLUGIN "Nullsoft LineIn Plug-in v%s"
+ 65535 "{EA1C197A-D227-474c-A9FD-1C79DE722BDD}"
+END
+
+STRINGTABLE
+BEGIN
+ IDS_NULLSOFT_LINEIN_PLUGIN_OLD "Nullsoft LineIn Plug-in"
+ IDS_LINE_INPUT "Line Input"
+ IDS_ABOUT_TEXT "%s\nCopyright © 1997-2023 Winamp SA\n\nBuild date: %hs\n\nHow to use:\n For line input, open 'linein://'\n in the open location box."
+END
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+#include "version.rc2"
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/Src/Plugins/Input/in_linein/in_linein.sln b/Src/Plugins/Input/in_linein/in_linein.sln
new file mode 100644
index 00000000..dd89a609
--- /dev/null
+++ b/Src/Plugins/Input/in_linein/in_linein.sln
@@ -0,0 +1,30 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29609.76
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "in_linein", "in_linein.vcxproj", "{0B5E2B59-BD34-4675-987E-6752A6F9D77D}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {0B5E2B59-BD34-4675-987E-6752A6F9D77D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0B5E2B59-BD34-4675-987E-6752A6F9D77D}.Debug|Win32.Build.0 = Debug|Win32
+ {0B5E2B59-BD34-4675-987E-6752A6F9D77D}.Debug|x64.ActiveCfg = Debug|x64
+ {0B5E2B59-BD34-4675-987E-6752A6F9D77D}.Debug|x64.Build.0 = Debug|x64
+ {0B5E2B59-BD34-4675-987E-6752A6F9D77D}.Release|Win32.ActiveCfg = Release|Win32
+ {0B5E2B59-BD34-4675-987E-6752A6F9D77D}.Release|Win32.Build.0 = Release|Win32
+ {0B5E2B59-BD34-4675-987E-6752A6F9D77D}.Release|x64.ActiveCfg = Release|x64
+ {0B5E2B59-BD34-4675-987E-6752A6F9D77D}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {88B3FE0C-E6C6-43C1-9A78-25F6398E17D5}
+ EndGlobalSection
+EndGlobal
diff --git a/Src/Plugins/Input/in_linein/in_linein.vcxproj b/Src/Plugins/Input/in_linein/in_linein.vcxproj
new file mode 100644
index 00000000..c5df7304
--- /dev/null
+++ b/Src/Plugins/Input/in_linein/in_linein.vcxproj
@@ -0,0 +1,248 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{0B5E2B59-BD34-4675-987E-6752A6F9D77D}</ProjectGuid>
+ <RootNamespace>in_linein</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
+ <IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
+ <IncludePath>$(IncludePath)</IncludePath>
+ <LibraryPath>$(LibraryPath)</LibraryPath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
+ <IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
+ <IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
+ <IncludePath>$(IncludePath)</IncludePath>
+ <LibraryPath>$(LibraryPath)</LibraryPath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
+ <IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
+ </PropertyGroup>
+ <PropertyGroup Label="Vcpkg">
+ <VcpkgEnabled>false</VcpkgEnabled>
+ </PropertyGroup>
+ <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <VcpkgConfiguration>Debug</VcpkgConfiguration>
+ </PropertyGroup>
+ <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <VcpkgConfiguration>Debug</VcpkgConfiguration>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..\Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;IN_LINEIN_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>false</MinimalRebuild>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ <PostBuildEvent>
+ <Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\
+xcopy /Y /D $(IntDir)$(TargetName).pdb ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\ </Command>
+ <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\'</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..\Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;_USRDLL;IN_LINEIN_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>false</MinimalRebuild>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <ImportLibrary>$(IntDir)$(ProjectName).lib</ImportLibrary>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ <PostBuildEvent>
+ <Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\
+xcopy /Y /D $(IntDir)$(TargetName).pdb ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\ </Command>
+ <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\'</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MinSpace</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <AdditionalIncludeDirectories>..\..\..\Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;IN_LINEIN_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>true</BufferSecurityCheck>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>None</DebugInformationFormat>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+ <DelayLoadDLLs>winmm.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <SubSystem>Windows</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>true</RandomizedBaseAddress>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ <PostBuildEvent>
+ <Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\ </Command>
+ <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\'</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <Optimization>MinSpace</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <AdditionalIncludeDirectories>..\..\..\Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;_USRDLL;IN_LINEIN_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>true</BufferSecurityCheck>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>None</DebugInformationFormat>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+ <DelayLoadDLLs>winmm.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <SubSystem>Windows</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>true</RandomizedBaseAddress>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ <PostBuildEvent>
+ <Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\ </Command>
+ <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\'</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="audio.cpp" />
+ <ClCompile Include="in_linein.cpp" />
+ <ClCompile Include="LineIn.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="audio.h" />
+ <ClInclude Include="LineIn.h" />
+ <ClInclude Include="main.h" />
+ <ClInclude Include="resource.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="in_linein.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\..\Wasabi\Wasabi.vcxproj">
+ <Project>{3e0bfa8a-b86a-42e9-a33f-ec294f823f7f}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/Src/Plugins/Input/in_linein/in_linein.vcxproj.filters b/Src/Plugins/Input/in_linein/in_linein.vcxproj.filters
new file mode 100644
index 00000000..04181cd8
--- /dev/null
+++ b/Src/Plugins/Input/in_linein/in_linein.vcxproj.filters
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="audio.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="in_linein.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="LineIn.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="audio.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="LineIn.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="main.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="resource.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{0d321d64-ec0a-44a6-a09d-35003a2ea058}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Ressource Files">
+ <UniqueIdentifier>{7da33fde-69de-427a-8046-46e6f4846f14}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{012164b1-deee-45fb-a608-b2353dd37d5b}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="in_linein.rc">
+ <Filter>Ressource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/Src/Plugins/Input/in_linein/main.h b/Src/Plugins/Input/in_linein/main.h
new file mode 100644
index 00000000..8e30eeec
--- /dev/null
+++ b/Src/Plugins/Input/in_linein/main.h
@@ -0,0 +1,7 @@
+#ifndef NULLSOFT_MAINH
+#define NULLSOFT_MAINH
+
+#include "../winamp/in2.h"
+extern In_Module line;
+
+#endif \ No newline at end of file
diff --git a/Src/Plugins/Input/in_linein/resource.h b/Src/Plugins/Input/in_linein/resource.h
new file mode 100644
index 00000000..c163119a
--- /dev/null
+++ b/Src/Plugins/Input/in_linein/resource.h
@@ -0,0 +1,22 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by in_linein.rc
+//
+#define IDS_NULLSOFT_LINEIN_PLUGIN_OLD 0
+#define IDS_ABOUT_STR 1
+#define IDS_ABOUT 2
+#define IDS_STRING3 3
+#define IDS_LINE_INPUT 3
+#define IDS_ABOUT_TEXT 4
+#define IDS_NULLSOFT_LINEIN_PLUGIN 65534
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 104
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1001
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/Src/Plugins/Input/in_linein/version.rc2 b/Src/Plugins/Input/in_linein/version.rc2
new file mode 100644
index 00000000..0626529d
--- /dev/null
+++ b/Src/Plugins/Input/in_linein/version.rc2
@@ -0,0 +1,39 @@
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+#include "../../../Winamp/buildType.h"
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 3,16,0,0
+ PRODUCTVERSION WINAMP_PRODUCTVER
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "CompanyName", "Winamp SA"
+ VALUE "FileDescription", "Winamp Input Plug-in"
+ VALUE "FileVersion", "3,16,0,0"
+ VALUE "InternalName", "Nullsoft LineIn Plug-in"
+ VALUE "LegalCopyright", "Copyright © 1997-2023 Winamp SA"
+ VALUE "LegalTrademarks", "Nullsoft and Winamp are trademarks of Winamp SA"
+ VALUE "OriginalFilename", "in_linein.dll"
+ VALUE "ProductName", "Winamp"
+ VALUE "ProductVersion", STR_WINAMP_PRODUCTVER
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END