Get it on Google Play


Wm뮤 :: '분류 전체보기' 카테고리의 글 목록 (13 Page)

블로그 이미지
가끔 그림그리거나 3D모델링하거나
취미로 로봇만드는
전자과 게임프로그래머 (퇴사함)
2022.3.22f1 주로 사용
모카쨩
@Ahzkwid

Recent Comment

Archive


2024. 7. 31. 07:15 윈도우폼

 

 

 

 

 

 

 

 

 

출력단자


for (int i = 0; i< NAudio.Wave.WaveOut.DeviceCount; i++)
{
    var caps = NAudio.Wave.WaveOut.GetCapabilities(i);
    comboBox2_Output.Items.Add(caps.ProductName);
}
if (comboBox2_Output.Items.Count > 0)
{ 
    comboBox2_Output.SelectedIndex = 0;
    outputDevice = new WaveOutEvent() { DeviceNumber = 0 };
}
void comboBox2_Output_SelectedIndexChanged(object sender, EventArgs e)
{
    outputDevice.DeviceNumber = comboBox2_Output.SelectedIndex;
}

void Speech(string str)
{
    //synth.Speak(str);




    if (outputDevice != null)
    {
        outputDevice.Stop();
    }

    var waveProvider = new SpeechToWaveProvider(synth, (string)str);
    outputDevice.Init(waveProvider);
    outputDevice.Play();



}

public class SpeechToWaveProvider : IWaveProvider
{
    private readonly BufferedWaveProvider waveProvider;

    public SpeechToWaveProvider(SpeechSynthesizer synth, string text)
    {
        var memoryStream = new MemoryStream();
        synth.SetOutputToWaveStream(memoryStream);
        synth.Speak(text);
        synth.SetOutputToDefaultAudioDevice();

        var waveFormat = new WaveFormat(22000, 1);
        waveProvider = new BufferedWaveProvider(waveFormat)
        {
            BufferLength = (int)memoryStream.Length
        };

        memoryStream.Position = 0;
        var buffer = new byte[memoryStream.Length];
        memoryStream.Read(buffer, 0, buffer.Length);
        waveProvider.AddSamples(buffer, 0, buffer.Length);
    }

    public WaveFormat WaveFormat => waveProvider.WaveFormat;

    public int Read(byte[] buffer, int offset, int count)
    {
        return waveProvider.Read(buffer, offset, count);
    }
}

 

 

 

입력단자

for (int i = 0; i < NAudio.Wave.WaveIn.DeviceCount; i++)
{
    var caps = NAudio.Wave.WaveIn.GetCapabilities(i);
    comboBox_Input.Items.Add(caps.ProductName);
}

if (comboBox_Input.Items.Count > 0)
{

    LoadRecognize();
    inputDevice = new WaveInEvent() ;
    inputDevice.DataAvailable += OnDataAvailable;
    //inputDevice.BufferMilliseconds =100;

    comboBox_Input.SelectedIndex = 0;

    //inputDevice.StartRecording();
}

private void comboBox_Input_SelectedIndexChanged(object sender, EventArgs e)
{
    inputDevice.StopRecording();
    inputDevice.DeviceNumber = comboBox_Input.SelectedIndex;
    inputDevice.StartRecording();
}
void OnDataAvailable(object s, WaveInEventArgs e)
{
    // audioStream에 데이터 추가
    if (e.Buffer.Length==0)
    {
        return;
    }

    var waveFormat = inputDevice.WaveFormat;
    var audioStreamMax = 0;
    if (audioStream.Length>0)
    {
        //audioStreamMax = audioStream.ToArray().Max();
        audioStreamMax = GetSamples(audioStream.ToArray(), waveFormat).Max();
    }

    /*
    var arr = e.Buffer;
    for (int i = 0;i< arr.Length;i++)
    {
        arr[i] = (byte)(i % 255);
    }
    audioStream.Write(arr, 0, e.BytesRecorded);

    */
    var cutout = 32;
    {

        var waveStream = new RawSourceWaveStream(new MemoryStream(e.Buffer), waveFormat) as WaveStream;
        waveViewer_Input.WaveStream = waveStream;

        if ((audioStreamMax > cutout) || (GetSamples(e.Buffer, waveFormat).Max() > cutout))
        {
            audioStream.Write(e.Buffer, 0, e.BytesRecorded);
        }
    }

    if (audioStream.Length > inputDevice.WaveFormat.SampleRate*2)
    {
        var array = audioStream.ToArray();
        var samples = GetSamples(array, waveFormat);
        var startIndex = System.Array.FindIndex(samples, x => x > cutout);
        var lastIndex = System.Array.FindLastIndex(samples, x => x > cutout);
        var length = lastIndex - startIndex + 1;
        var sliceArray = array.Skip(startIndex * 2).Take(length * 2).ToArray();


        var max = (float)samples.Max();
        var amp = 32767f / max/2;
        amp = Math.Max(1, amp);
        amp = Math.Min(16, amp);
        sliceArray = Amplify(sliceArray, amp);
        //var stream = new RawSourceWaveStream(new MemoryStream((byte[])audioStream.ToArray().Clone()), waveFormat);
        var memoryStream = new MemoryStream(sliceArray);
        var waveStream = new RawSourceWaveStream(memoryStream, waveFormat) as WaveStream;

        waveViewer_Text.WaveStream = waveStream;
        //recognizer.SetInputToAudioStream(memoryStream, new SpeechAudioFormatInfo(waveFormat.SampleRate, AudioBitsPerSample.Sixteen, AudioChannel.Stereo));

        recognizer.SetInputToAudioStream(memoryStream, new SpeechAudioFormatInfo(
            waveFormat.SampleRate,
            (AudioBitsPerSample)waveFormat.BitsPerSample,
            (AudioChannel)waveFormat.Channels
        ));

        //recognizer.SetInputToWaveStream(waveStream);
        recognizer.RecognizeAsync(RecognizeMode.Multiple);
        audioStream.SetLength(0);
        //Console.WriteLine("전달");
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'윈도우폼' 카테고리의 다른 글

윈폼 TTS  (0) 2024.07.31
윈폼 차트  (0) 2024.01.15
윈도우용 대화형 프로그램 설정  (0) 2023.09.26
posted by 모카쨩
2024. 7. 31. 01:06 윈도우폼

 

 

 

기본적으로 설치되어있으므로 필수는 아닌데 설치하면 좋다

 

 

 

 

 

 

 

 

 

https://github.com/ahzkwid/WindowVoice/blob/main/WindowVoice/Form1_main.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Windows.Input;
using System.Speech.Synthesis;

namespace WindowVoice
{
    public partial class Form1_main : Form
    {
        private static SpeechSynthesizer synth = new SpeechSynthesizer();
        public Form1_main()
        {
            InitializeComponent();
            
            synth.SetOutputToDefaultAudioDevice();
            //synth.SelectVoice("Microsoft Server Speech Text to Speech Voice (ko-KR, Heami)");
            //synth.SelectVoice("Microsoft Server Speech Text to Speech Voice (ko-KR, TELE)");
            //synth.SelectVoiceByHints(VoiceGender.Male);
            //synth.SelectVoice("Microsoft Zira Desktop");
            //synth.SelectVoice("Microsoft Heami Desktop");

            textBox1_speech.KeyDown += new System.Windows.Forms.KeyEventHandler(this.key_down);
        }
        private void key_down(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Escape)//ESC눌렀을떄
            {
                textBox1_speech.Text = "";
            }
            if ((e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return)) //엔터 눌렀을때
            {
                if (((Control.ModifierKeys & Keys.Alt) == Keys.Alt)) //알트눌려있을때
                {
                    int pos = textBox1_speech.SelectionStart;//텍스트박스 포인터 위치
                    textBox1_speech.Text += "\r\n"; //엔터추가 \r을 붙여야 연속추가가 되는듯
                    textBox1_speech.Select(pos + 2, 0); //텍스트박스 포인터 복구하고 엔터 길이만큼 이동
                }
                else
                {
                    e.SuppressKeyPress = true;//엔터무시
                    speech();
                    if (checkBox1_enter_to_clear.Checked == true) //엔터 누를떄 지우기 체크되어있을경우
                    {
                        textBox1_speech.Text = "";
                    }
                }
            }
        }
        private void speech()
        {
            if (textBox1_speech.Text == "문장 입력")
            {
                textBox1_speech.Text = "";
            }
            if (textBox1_speech.Text != "")
            {
                System.Threading.ThreadPool.QueueUserWorkItem(speech, textBox1_speech.Text); //스레드풀
                //speech(textBox1_speech.Text);
            }
        }
        private void speech(Object str)
        {
            synth.Speak((string)str);
        }
        private void speech(string str)
        {
            synth.Speak(str);
        }

        private void button1_enter_Click(object sender, EventArgs e)
        {
            speech();
        }
    }
}

'윈도우폼' 카테고리의 다른 글

C# NAudio  (0) 2024.07.31
윈폼 차트  (0) 2024.01.15
윈도우용 대화형 프로그램 설정  (0) 2023.09.26
posted by 모카쨩
2024. 7. 26. 11:47 이 세계의 법칙

 

 

 

 

 

 

 

 

소자들을 직렬로 연결하는대신 전압을 올려서 출력을 올리면 기하급수적으로 올라간다

 

 

다만 일반적인 에어컨에 쓰이는 증기압축식 과 달리 규모에 대해 소자가 비싸 가정용으로 쓰이지 않는 편. 

효율이 낮다는 잘못된 소문이 있는데 이건 옴의 법칙을 이용해서 소자 여러개를 병렬로 연결하는 식으로 저항값을 조절해 전압과 전류를 조절하면 효율이 올라간다. 

전류가 낮을수록 COP(냉방효율)이 급격하게 오르기 때문. 

그래프로 보면 거의 무한대에 가깝게 올라가는데 이는 줄의법칙때문에 전류를 늘리면 발열량은 제곱으로 늘어나기 때문에 그렇다.

그래서 규모를 키우면 효율이 올라가긴 하지만 손톱만한 소자도 만원가까이 하기때문에 일반적인 에어컨을 고효율로 구현하기 위해 규모를 키우면 수백만원이 들어가서 상업성이 없기때문에 사용하지 않을뿐 최대효율 자체는 증기압축식은 명함도 못 내밀정도로 높다

 

난방을 대상으로 하면 엄청난 진가가 드러난다. 전기난로는 효율이 100%이므로 100W를 투입하면 100W(J/s)수준의 열이 나오지만 COP 1.7로 맞춰서 100W를 썼다고 가정하면 난방은 170W(J/s) 수준이 나온다. 어떻게 이런 열역학법칙을 위배하는듯한 현상이 발생하느냐면 기존 난방장치는 가진 에너지를 열로 바꾸는 것이기에 투입된 에너지를 절대 넘을 수 없지만, 펠티어 소자는 반대편에 존재하는 열에너지를 이쪽으로 끌어오는 것이기 때문에 투입된 에너지보다 더 많은 열을 낼 수 있다.

 

어째서 COP 1.7로 맞춘다는 두리뭉술한 표현을 사용했냐하면 COP는 온도차와 전류량, 대류, 소자크기 등에 영향을 받기 때문이다. 조건만 맞는다면 COP8은 우습게 넘는다.

 

증기압축식 냉동기와 비교하여 보면 펠티어 소자가 증기압축식 냉동기보다 최대 COP가 높고, 기계식 부품이 없다.

 

펠티어 소자가 효율이 나쁘다는 인식이 있는데 그 이유는 펠티어소자는 크기가 클수록 전류가 낮아지고, COP가 높아지는데 소자 자체의 높은 단가로 인해 손바닥만한 초소형 소자에 출력을 조금이라도 올려보겠다고 전류를 미친듯이 때려박기 때문에 COP가 낮아지게 된다. 하지만 그렇다고 펠티어소자 자체가 증기압축식보다 효율이 낮은것은 아니다. 증기압축식 또한 펠티어소자처럼 손가락만한 크기로 바꿔서 500w로 소비전력을 올리면 COP가 0.1도 나오지 않는다. COP가 장비규모에 커다란 영향을 받기 때문에 냉장고와 에어컨 모두 거대한 압축기가 달려있는것이다. 규모에 상관없이 에너지 효율이 고정되었다면 우리는 손톱만한 크기의 에어컨에 2000w를 때려넣어서 냉방을 하고 있었을것이다.

 

증기압축식은 가스, 관, 모터 세개만 있어도 굴러갈정도로 구조가 워낙 단순하다보니 손으로도 제작할수 있을정도이며 그 덕분에 매우 저렴하여 동일 비용대비 무게와 부피 출력 모두 수십배는 된다. 펠티어 소자는 PN반도체를 셀단위로 수백수천개를 박아야하는데다가 귀중한 실리콘 잉곳이 필요하다 보니 첨단장비가 필요하고 비용이 어마어마하게 들어간다.

 

현재는 높은 단가로 인해 주목받지 못 하지만 기술이 발전하여 냉장고나 에어컨에 사용할 수 있는 대형 소자를 저렴하게 제조할 수 있을 정도가 되면 SSD가 하드디스크를 밀어낸것처럼 저소음과 높은 COP로 증기압축식을 밀어낼 가능성이 있다.

 

 

COP 이야기가 나왔으니 더 해보자. 위에서 설명했듯 COP는 장비규모에 제일 커다란 영향을 받는다. 증기압축식이든 펠티어든 그냥 크게 만들면 그녀석이 효율이 더 좋다. 하지만 내가 증기압축식보다 효율이 더 좋다고 이야기 하는것은 증기압축식의 물리적인 한계 때문이다. 이녀석은 자기장을 동력으로 바꾸고 이 동력으로 마찰력을 이겨내면서 압축과 팽창을 만들어내고 대류시켜 열교환을 만들어낸다. 여기서 모터또한 대형화할수록 에너지 효율이 올라가는데 모터는 무거워질수록 마찰력이 커지고 따라서 올릴수 있는 에너지효율에도 한계가 있으며 구동할수 있는 최소한의 에너지가 높아져 일정이상 커지면 무조건 고출력만 사용가능하게 된다.

그래서 펠티어 소자와는 근본적인 차이가 있는것이다. 

 

몰론 펠티어도 반도체라는 특성상 문턱전압 0.7v가 제약을 걸기는 하나 이것은 정말 사소한 문제이므로

 

반도체 생산설비가 날이갈수록 늘어나고 있으므로 늦어도 21세기 후반에는 부자들은 펠티어 에어컨

서민들은 증기압축식 에어컨을 사용하는식으로 나뉠것이다

 

 

 

 

 

 

 

 

일부 내용들은 위키에도 써져있을것인데 내가 써넣은것이다

 

 

 

 

 

 

 

관련링크

 

http://happyco.kr/img/306.pdf

 

 

https://thermalbook.wordpress.com/cop-of-a-thermoelectric-cooler-tec/

 

https://thermalbook.wordpress.com/thermoelectric-cooler-performance-calculator/comment-page-1/

 

 

https://www.meerstetter.ch/customer-center/compendium/71-peltier-element-efficiency

 

posted by 모카쨩
2024. 7. 23. 00:37 게임/VRChat

 

 

 

 

 

ArgumentException: Illegal byte sequence encounted in the input.
Parameter name: string

 

CC

Unity Hub

Unity실행파일

사용자명

프로젝트경로

장치이름을 모두 영어경로로 바꿔주고 방화벽 허용하면 된다

 

특히 장치이름이 제일 중요하다

 

장치이름은 설정 > 시스템 > 정보 > 장치이름 순으로 들어가면 존재한다

 

참고링크 : https://community.thebackend.io/t/topic/4950

 

 

 

 

 

--------------------------------------------------------------------------------------------------

 

 

 

 

 

Images used for Actions & Moods are too large.

 

 

ExpressionsMenu 아이콘 해상도를 256이하로 맞추면 해결된다

 



 

 

--------------------------------------------------------------------------------------------------

 

 

 

Error while saving Prefab: 'Assets/prefab-id-v1_avtr_.prefab'. You are trying to save a Prefab with a missing script. This is not allowed.
Please change the script or remove it from the GameObject 'Head'.
A UnityEditor.BuildPipeline:BuildAssetBundles (string UnityEditor.AssetBundleBuild[], UnityEditor.BuildAssetBundleOptions, UnityEditor.BuildTarget)
No AssetBundle has been set for this build.

 

미싱컴포넌트가 존재해서 그렇다

 

 

싹 찾아내서 다 지워준다 

 

 

 



--------------------------------------------------------------------------------------------------

 

 

Encountered the following validation issues during build:
UnityEngine.Debug:LogError (object)
Your avatar is disabled in the scene hierarchy!
UnityEngine.Debug:LogError (object)

 

제대로 활성화 되어있는데 안될때

 

 

 

비활성화 했다가 다시 활성화 해준다

 

 

셀렉트 아바타도 다시 한번 선택해준다

 

'게임 > VRChat' 카테고리의 다른 글

VRChat Avatar SDK Event  (0) 2024.08.22
캐릭터별 의상 대응방법  (0) 2024.05.17
VRChat 3인칭 카메라 사용법  (0) 2024.04.02
posted by 모카쨩
2024. 7. 17. 23:59 3D/서브스탠스 페인터

 

 

 

 

보다시피 UV를 개병신같이 펴서 텍스처가 병신같이 찍혔다

처음부터 깨끗하게 펴는게 제일 좋지만 이미 늦었다.

이건 선작업이 너무 많이 들어가서 개병신으로 살아야 한다.

그리고 솔직히 말하면 너무 귀찮아서 펴기 귀찮을때도 있다

하지만 서브스탠스에는 트라이플래너 기능이 지원되어 좌표축 기준으로 텍스처를 투사할수가 있다

 

 

선택하면 된다

 

 

 

 

 

 

 

 

 

 

단점은 이렇게 사선각도 부분이 깨끗하게 안 나온다 

 

 

 

 

 

 

 

posted by 모카쨩
2024. 7. 16. 20:02 사용설명서

 

 



 

 

 

 

 

 

 

만약 이미 적용되어있다면 주모니터를 다른거로 했다가 다시 설정한다 

 

 

 

 

 

 

 

'사용설명서' 카테고리의 다른 글

카톡 감옥 방지, 예방  (0) 2024.08.09
마켓비 벙커침대 조립설명서  (0) 2024.06.23
비디오 캡처 방법  (0) 2024.06.04
posted by 모카쨩
2024. 7. 16. 02:32 의상

 

 

たれ目 (タレ目)

타레메

처진눈
바깥쪽이 아래로 처지면 타레눈

가끔 수평에 가깝게 눈매가 퍼져있고 좌우가 처져있어야 하는거로 보는사람도 있긴 함

걍 둥글면 다 타레메로 봐도 된다

 

 

 

 

 

 

 

釣り目 (吊り目)

츠리메

낚시눈

낚싯바늘에 걸린것같은 눈

진짜 이름 그대로다

타레메 반대말로 봐도 무방

 

 

 

 

ジト目

지토메

경멸하는 눈

근데 그냥 반쯤 감은 눈으로 봐도 무방

타레메와 츠리메의 사이라고 보면 된다

 

 

 

 

 

 

 

はちゅ目

하츄메

MMD 용어

아웃라인이 있는 동그란 흰색눈 

 

'의상' 카테고리의 다른 글

일본 패션 자료  (0) 2024.11.07
의상 자료 모음  (0) 2024.07.07
posted by 모카쨩
2024. 7. 13. 19:00 3D/블렌더

 

 

v1

https://x.com/ahzkwid/status/1617564747985215488

 

 

 

 

 

 

 

v2

Milkトレーナーセット

https://x.com/ahzkwid/status/1810272882418942345

 

X의 ahzkwid님(@ahzkwid)

마메 맨투맨 리메이크 작업 시작

x.com

 

 

 

'3D > 블렌더' 카테고리의 다른 글

블렌더 발가락 돌아감 문제 해결방법  (0) 2024.08.28
블렌더 Retopoflow  (0) 2024.06.18
블렌더 2.78 파이썬 명령어 모음  (0) 2024.06.12
posted by 모카쨩

저사양 유저용 블로그 진입