Monday, April 22, 2019

UE4: How to use the new AudioCapture component to record microphone audio

There are two functions for recording audio:
* Start Recording Output
* Start Recording Submix Output

Steps:
1. Follow this quick start guide to activate the new audio engine, e.g. uncomment AudioDeviceModuleName=AudioMixerXAudio2 in WindowsEditor.ini if you're developing on Windows

2. In your blueprint, add the AudioCapture component

3. Use "Start Recording Output" to record the master output of the game. Otherwise, use "Start Recording Submix Output" to capture a particular sound source (see note #2 below).

4. If you don't specify an output path, it saves the .wav file in Saved\BouncedWavFiles


Note:
* UE4 will crash if no audio input device is connected. Probably should use the "Enumerate Audio Capture Devices" function to check for available devices before recording.

* Setting up a Submix Destination on your Sound Source

Unless otherwise set or specified, all Sound Sources output to the Master Submix (not visible on graph) by default. However, it will sometimes be desirable to have your sound source output into a different Submix.
  1. Access the details panel for your sound source
  2. Locate the Effects submenu
  3. Locate the entry called Sound Submix
    1. If this says “None,” then the sound defaults output to the Master Submix
    2. Here you can enter an alternate Submix
    3. Note the separate Default Master Reverb Send amount if you wish to simply send the source to the Master Reverb

Ref:
Confused about new Audio Capture Component usage in 4.19 - Unreal Engine Forums
New Audio Engine: Early Access Quick-Start Guide - Unreal Engine Forums

Wednesday, April 3, 2019

Firefox: taking fullscreen screenshot

Steps:
1. press F12 to bring up Web Developer Tools
2. press F1 to open up Settings
3. scroll down to Available Toolbox Buttons and enable Take a screenshot of the entire page
4. a camera icon would appear at the top right of the Web Developer Tools panel. By default, it saves the screenshot in your Downloads directory.

Ref:
Firefox 32 for developers - Mozilla | MDN

For Chrome, see here

Friday, March 29, 2019

UE4: Reduce CPU usage of Unreal Engine Editor

Recently I started to play around with Unreal Engine. One thing I noticed was that when I have my game project open, the Unreal Engine Editor is consistently taking 20%-30% CPU power.

One simple solution is to turn off realtime rendering.
1. In the viewport, click on the triangle in upper left corner
2. Uncheck Realtime

Another solution is to limit viewport frame rate.
1. In Unreal Engine Editor, press ` key to bring up the command line prompt
2. Type t.MaxFPS 30 will limit it to 30 FPS. You can tweak this number based on your setup

Extra:
Type dumpconsolecommands to view the list of available console commands

GameFromScratch.com has a nice article on other tips and tricks to help maximize battery life for UE4 development on laptop.

Ref:
Is there a way to limit GPU usage? - UE4 AnswerHub
UE4 Console commands list - UE4 AnswerHub

Sunday, January 13, 2019

Python3: Authenticate with Discord API using urllib.request

I wanted to do some automation with Discord, so I started writing a Python script to query Discord's API. First step is to authenticate with Discord. Following the documentation, I sent a POST request to the token URL. However, I was getting a HTTP 403 with error message
"Please enable cookies. Error 1010...Access denied...The owner of this website (discordapp.com) has banned your access based on your browser's signature..." It appears to be protected by Cloudflare.

First thing I tried was to use http.cookiejar for my POST request, but that did not help. Following the sample code in the documentation, I switched over to requests instead of the built-in library urllib.request, and it worked! But I was curious why it did not work with urllib.request.

Then I tried Postman to send the POST request, and it worked as well. Postman has a code generation feature for http.client (Python 3). There were some errors in the generated code, but I was able to fix them and got it to work with Discord. http.client is a low-level library and used by urllib.request, so why is it working with http.client but not urllib.request?

Next, I fired up Wireshark to monitor and compare the POST requests. After bunch of trial and error, I found the answer to be rather simple.

User-Agent:
"" (empty string) - works
"python-requests/2.21.0" - works
"Python-urllib/3.6" - does not work

It turns out Cloudflare does not like the user-agent string from urllib.request. Requests from http.client do not have an user-agent set by default, thus it worked. So for anyone who want to use urllib.request, set the user-agent to blank or match with your browser should avoid this error.

Thursday, December 27, 2018

Win10: Look up build and version info

I was trying to find out if I'm running Windows 10 1809. I checked Control Panel > System (Win+Pause) but it's not listed there.

Instead, open the Settings app (Win+I), then navigate to System >  About. The OS build and version is listed under Windows specifications

Ref:
How to Find Out Which Build and Version of Windows 10 You Have

Friday, November 9, 2018

Win10: Photos app opens extremely slow

The Photos app on Windows 10 is just painfully slow.

Solution:
1. go to Settings > Privacy
2. under App permissions on the left, scroll down to Pictures
3. turn OFF Allow apps to access your pictures library
---
4. go to App & features
5. select Microsoft Photos > Advanced options > Reset
---
6. open Photos
7. click on the overflow menu (three dots) > Settings
8. remove any folders from collection
9. turn OFF Linked duplicates
10. turn OFF People

Alternatively, you can change the default program back to Windows Photo Viewer.